0

応答時のajaxリダイレクトに問題があります。リダイレクションは完全に機能しますが、後で応答付きのブール値を返す必要がある場合は、リダイレクションが返されます。

これがコードです。関連する行にはコメントがあります:

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Worker extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private static String firstName = "";
    private static String lastName = "";
    private static boolean doAnimWheel = false;
    private static String portion;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

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

        // begin recovering form
        Worker.firstName = request.getParameter("firstName");
        Worker.lastName = request.getParameter("lastName");

        response.sendRedirect("launch.html"); // TODO find why it blocks response
        // end recovering form

        String param = request.getParameter("srcId");
        if(param != null) {
            if(param.equals("launch")) {
                Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue();
                return;
            }
            else if(param.equals("wheel")) {
                response.setContentType("text/plain");
                PrintWriter out = response.getWriter();
                out.print(Worker.doAnimWheel); // Here I have to return my Boolean, but it return launch.html
                out.flush();
                out.close();
                return;
            }
            else if(param.equals("result")) {
                Worker.portion = request.getParameter("portion");
                Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue();
                return;
            }
        }
    }
}
4

1 に答える 1

0

問題は、メソッドの最初に常にリダイレクトを送信することだと思います

    response.sendRedirect("launch.html"); // TODO find why it blocks response
    // end recovering form

sendRedirectメソッドHttpServletResponseのJavaドキュメントには、「このメソッドを使用した後は、応答がコミットされていると見なされ、書き込まれないようにする必要があります」と記載されています。
後で戻そうとするものは明らかに無視されます。


次のように、実際にリダイレクトを実行する必要があるコードのブランチにsendRedirect呼び出しを移動することをお勧めします。

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

        // begin recovering form
        Worker.firstName = request.getParameter("firstName");
        Worker.lastName = request.getParameter("lastName");

        String param = request.getParameter("srcId");

        if(param.equals("launch")) {
                        Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue();
                        response.sendRedirect("launch.html");
                        return;
                    }
                    else if(param.equals("wheel")) {
                        response.setContentType("text/plain");
                        PrintWriter out = response.getWriter();
                        out.print(Worker.doAnimWheel); // Here I have to return my Boolean, but it return launch.html
                        out.flush();
                        out.close();
                        return;
                    }
                    else if(param.equals("result")) {
                        Worker.portion = request.getParameter("portion");
                        Worker.doAnimWheel = new Boolean(request.getParameter("doAnimWheel")).booleanValue();
                        response.sendRedirect("launch.html");
                        return;
                    }
        }
    }
}
于 2012-07-25T07:37:22.350 に答える