107 votes

java.lang.IllegalStateException : Impossible (forward | sendRedirect | create session) après que la réponse ait été validée.

Cette méthode lance

java.lang.IllegalStateException : Impossible d'avancer après que la réponse ait été validée

et je ne parviens pas à identifier le problème. Vous pouvez m'aider ?

    int noOfRows = Integer.parseInt(request.getParameter("noOfRows"));
    String chkboxVal = "";
    // String FormatId=null;
    Vector vRow = new Vector();
    Vector vRow1 = new Vector();
    String GroupId = "";
    String GroupDesc = "";
    for (int i = 0; i < noOfRows; i++) {
        if ((request.getParameter("chk_select" + i)) == null) {
            chkboxVal = "notticked";
        } else {
            chkboxVal = request.getParameter("chk_select" + i);
            if (chkboxVal.equals("ticked")) {
                fwdurl = "true";
                Statement st1 = con.createStatement();
                GroupId = request.getParameter("GroupId" + i);
                GroupDesc = request.getParameter("GroupDesc" + i);
                ResultSet rs1 = st1
                        .executeQuery("select FileId,Description from cs2k_Files "
                                + " where FileId like 'M%' and co_code = "
                                + ccode);
                ResultSetMetaData rsm = rs1.getMetaData();
                int cCount = rsm.getColumnCount();

                while (rs1.next()) {
                    Vector vCol1 = new Vector();
                    for (int j = 1; j <= cCount; j++) {
                        vCol1.addElement(rs1.getObject(j));
                    }
                    vRow.addElement(vCol1);
                }
                rs1 = st1
                        .executeQuery("select FileId,NotAllowed from cs2kGroupSub "
                                + " where FileId like 'M%' and GroupId = '"
                                + GroupId + "'" + " and co_code = " + ccode);
                rsm = rs1.getMetaData();
                cCount = rsm.getColumnCount();

                while (rs1.next()) {
                    Vector vCol2 = new Vector();
                    for (int j = 1; j <= cCount; j++) {
                        vCol2.addElement(rs1.getObject(j));
                    }
                    vRow1.addElement(vCol2);
                }

                // throw new Exception("test");

                break;
            }
        }
    }
    if (fwdurl.equals("true")) {
        // throw new Exception("test");
        // response.sendRedirect("cs2k_GroupCopiedUpdt.jsp") ;
        request.setAttribute("GroupId", GroupId);
        request.setAttribute("GroupDesc", GroupDesc);
        request.setAttribute("vRow", vRow);
        request.setAttribute("vRow1", vRow1);
        getServletConfig().getServletContext().getRequestDispatcher(
                "/GroupCopiedUpdt.jsp").forward(request, response);
    }

4 votes

C'est difficile à voir comme ça, mais il semble que vous ayez déjà envoyé une sortie avant votre avant. Pourriez-vous imprimer le code complet et vérifier que vous n'avez pas de filtre en place ?

2voto

Kartik_Agarwal Points 1

J'ai retiré

        super.service(req, res);

Ensuite, cela a bien fonctionné pour moi

2voto

John Rambo Points 63

Bump...

Je viens d'avoir la même erreur. J'ai remarqué que j'invoquais super.doPost(request, response); lors de la substitution de l'option doPost() ainsi que l'invocation explicite du constructeur de la super-classe

    public ScheduleServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

Dès que j'ai commenté le super.doPost(request, response); de l'intérieur doPost() déclaration, cela a fonctionné parfaitement...

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //super.doPost(request, response);
        // More code here...

}

Inutile de dire que j'ai besoin de relire sur super() les meilleures pratiques :p

0voto

Amir Amiri Points 401

Après avoir retourné la méthode Forward, vous pouvez simplement faire ceci :

return null;

Cela brisera la portée actuelle.

0voto

Taugenichts Points 802

Si vous rencontrez ce problème dans une application Web basée sur Spring, assurez-vous que votre méthode est annotée avec @ResponseBody ou que le contrôleur est annoté avec @RestController au lieu de @Controller. Cette exception sera également levée si une méthode renvoie du JSON, mais n'a pas été configurée pour que ce soit la réponse, Spring cherchera plutôt une page jsp à rendre et lèvera cette exception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X