после отправки формы и переадресации, контроллер вызывается снова - PullRequest
0 голосов
/ 04 июня 2019

Я застрял с этой проблемой: контроллер 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. поведение происходит на каждой странице: маршрутизатор вызывается дважды. Это проблема кота?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...