3
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

String branch =  req.getParameter("branch");
System.out.println(branch);
MOPMappingDAO dao = new MOPMappingDAO();
ArrayList<MOP> mops = dao.getMOP(branch);
System.out.println("No of MOPS " + mops.size());
req.setAttribute("mops",mops);
resp.sendRedirect("webpages/mopmapping.jsp");
}

上記は resp.sendRedirect() を使用しているコントローラー コードであるため、リクエスト属性は jsp コードで保持されません。これが私のjspコードです

<%
ArrayList<MOP> mops = (ArrayList<MOP>)request.getAttribute("mops");
System.out.print(mops);
System.out.println(mops.size());
for(MOP mop : mops){ //searchResults }
%>

mopsnullであるため、NullPointerExceptionが発生します。この場合、request.forward() を使用できますが、URL に含まれていませんwebpages/mopmapping.jsp。その場合、各リフレッシュの操作//searchResultsはコントローラーによって行われます。

解決策を提供してください

4

3 に答える 3

4

属性を失わないようにするには、次を使用します。

req.getRequestDispatcher("webpages/mopmapping.jsp").forward(request, response);

それ以外の :

resp.sendRedirect("webpages/mopmapping.jsp");

幸運を

于 2015-06-20T14:13:59.367 に答える
2

リダイレクトは、実際にはクライアントに指示を送信して、リダイレクトされたリソースを HTTP GET します。したがって、これはまったく新しい要求/応答サイクルであり、それが属性が失われる理由です。

セッションを使用すると、問題が部分的に解決されます。セッションに配置したものを削除するように細心の注意を払う必要があります。削除しないと、ゴミとして残ります (この場合ではなく、特定の状況でこれらが蓄積されると、メモリ リークが発生する可能性があります)。

フレームワークはこれを flash スコープで解決します (グーグルで検索すると、このようなリンクが提供されます)。

ユース ケースに応じて、セッション/フラッシュ スコープまたは転送のどちらが最も適切かを決定する必要があります。

于 2013-10-15T10:29:40.810 に答える
0

リクエストディスパッチャーでURLを設定した後、リクエスト転送を行うことができます

これをチェックして

http://www.javapractices.com/topic/TopicAction.do?Id=181

于 2013-10-15T10:09:26.660 に答える