2013-10-15 3 views
1
@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-коде. Вот мой код JSPresponse.sendRedirect не сохраняет атрибуты запроса?

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

и я получаю NullPointerException, потому что mops является недействительным. Я могу использовать request.forward() в этом случае, но url не содержит webpages/mopmapping.jsp. В этом случае для каждого обновления операция //searchResults выполняется контроллером.

Просьба раствором

+0

почему не использовать session.setAttribute() и session.getAttribute() – SpringLearner

ответ

2

Чтобы не loste ваши атрибуты используют:

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

Вместо:

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

Удачи

+0

It не помогает. После этого изменения теперь я получаю ошибку 404. – naXa

2

редирект фактически отправляет команду клиенту к HTTP GET перенаправленный ресурс. Таким образом, это совершенно новый цикл запроса/ответа, поэтому ваш атрибут потерян.

Использование сеанса частично решает проблему. Вы должны проявлять особую осторожность, чтобы удалить вещь, которую вы разместили в сеансе, или она останется как мусор (и если они накапливаются при определенных обстоятельствах - не в этом случае - они могут вызвать утечку памяти).

Рамки разрешают это с использованием флэш-памяти (для поиска в Интернете это ссылки, такие как this).

В зависимости от вашего варианта использования вы должны решить, что наиболее подходит, область сеанса/вспышки или вперед.

Смежные вопросы