Я застрял с этой проблемой: контроллер JAVA EE (framework: tomcat) имеет метод String execute (запрос, ответ), который управляет страницей JSP house.jsp, при первом отображении формы и после формы завершение, он управляет возвращенными данными; после этого метод execute возвращает «/adminAccueil.jsp», и форвард в маршрутизаторе должен отображать правильную страницу jsp; это происходит, но я видел, что контроллер вызывается еще раз, неожиданно, и происходит сбой программы, поскольку объект запроса содержит неточные данные.
проще, вот код:
adminCreerModifierBien.jsp (тот, что с формой):
<form id="modif" action="intro?action=action5" method="post" accept-charset="UTF-8" novalidate
class="needs-validation">
<input type="hidden" id="id" name="id" value="${bien.getId()}"/>
<div class="row">
<div class="col">
<label for="description">Description :</label>
<input type="text" id="description" name="description"
class="form-control" value="${bien.getDescription()}" required/>
<div class="valid-feedback">
Ca a l'air bien!
</div>
<div class="invalid-feedback">
La description est nécessaire
</div>
</div>
</div>
<div class="row">
...
обратите внимание, что на странице jsp есть некоторый JavaScript:
$(function () {
'use strict';
window.addEventListener('load', function () {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function (form) {
form.addEventListener('submit', function (event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
});
используется для проверки формы.
контроллер управляет 2 типами звонков: прямой (GET) и после отправки формы (POST):
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
{
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
System.out.println("erreur de lecture des paramètres");
}
if (request.getParameter("description") != null) {
//si retour de formulaire
регистр без ошибок в контроллере заканчивается этим:
try {
daoBien.mettre_a_jour(bien_miseajour);
} catch (ImmobException e) {
request.setAttribute("message", "problème de mise à jour du bien");
request.setAttribute("bien", bien_miseajour);
try {
mettreVillesChauffagesOptionsDansRequest(request);
} catch (ImmobException ex) {
request.setAttribute("message","erreur lors d'accès à la base de données");
return "/admin/erreur/erreur.jsp";
}
return "/admin/biens/adminCreerModifierBien.jsp";
}
//ok
try {
request.setAttribute("tousBiens", daoBien.recupereBiensAvecRequete(
"order by DATECREATION desc"));
} catch (ImmobException e) {
request.setAttribute("message","erreur lors de la récupération des biens");
return "/admin/erreur/erreur.jsp";
}
return "/admin/adminAccueil.jsp";
Страница adminAccueil.jsp отображается правильно, но контроллер вызывается еще раз ...
здесь находится маршрутизатор (основной контроллер, который отправляет вызываемые контроллерам:
@Override
public void init() throws ServletException
{
correspondance.put("action1", new AccueilBiens());
correspondance.put("action2", new Acheter());
correspondance.put("action3", new DetailsBien());
correspondance.put("action4", new AdminAccueil());
correspondance.put("action5", new AdminCreerModifierBien());
correspondance.put("action6", new AdminSupprimerBien());
correspondance.put("action7", new AdminListeOptions());
correspondance.put("action8", new AdminCreerModifierOption());
correspondance.put("action9", new AdminSupprimerOption());
// logger = Logger.getLogger("immobiSite");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
process(request, response, getServletContext());
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
process(request, response, getServletContext());
}
public void process(HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws ServletException, IOException
{
// logger.info("test");
String action = null;
ICommand commandeRetour = null;
try {
action = request.getParameter("action");
if (action == null || action.equals(""))
action = "action1";
commandeRetour = correspondance.get(action);
request.setAttribute("retour_origine", "intro?action=" + request.getParameter("page_origine"));
} catch (Exception e) {
System.out.println("erreur de routage");
}
if (request.getSession().getAttribute("isAdmin") == null)
request.getSession().setAttribute("isAdmin", false);
servletContext.getRequestDispatcher(commandeRetour.execute(request, response)).forward(request, response);
}
Может кто-нибудь мне помочь? Поведение происходит от страницы JSP, или из-за неправильной концепции в моем маршрутизаторе?
спасибо.
EDIT:
добавленный вызов - GET.
поведение происходит на каждой странице: маршрутизатор вызывается дважды. Это проблема кота?