2014-02-07 3 views
0

Мне нужно ввести URL-адрес, подобный этому http://localhost:8080/first, после чего мой контроллер должен перейти на http://localhost:8080/second и так далее, пока не пришел к http://localhost:8080/end. Это что-то вроде рекурсии. На конечной точке мне нужно выбрать список.Как построить каскадный контроллер?

@Controller 
@RequestMapping(value = "/", method = RequestMethod.GET) 
public class CascadeController {  
    @RequestMapping("/first") 
    String first(ModelMap model) { 
     model.put("list", new ArrayList<String>()); 
     return "/second"; 
    } 

    @RequestMapping("/second") 
    String second(ModelMap model) { 
     ((List) model.get("list")).add("A"); 
     return "/third"; 
    } 

    @RequestMapping("/third") 
    String third(ModelMap model) { 
     ((List) model.get("list")).add("B"); 
     return "end"; 
    } 
} 

end.jsp

<%@ page import="java.util.List" %> 
<html> 
<body> 
    <%for(String s : (List<String>) request.getAttribute("list")){%> 
     <%=s%> 
    <%}%> 
</body> 
</html> 

Кто-нибудь может объяснить, что случилось с моим кодом?

+0

Какой результат вы получаете и как она отличается от ваших ожиданий? –

+0

Вы слышали о Spring Web Flow? Может быть, полезно .. – gipinani

+0

Я не могу использовать Spring WF, только MVC. – user3163426

ответ

0

Нужно ли пользователю видеть данные, размещенные на модели для первой и/второй страницы? Если нет, то как насчет попробовать изменить:

return "/second"; к return "redirect:/second";

и

return "/third"; в return "redirect:/third";

Если пользователю необходимо просмотреть данные о/первой или/второй странице для времени X , как насчет переадресации с javascript?

Отредактировано: Как насчет атрибутов вспышки см этот пост: reading flash attributes

@RequestMapping("/first") 
    String first(ModelMap model, final RedirectAttributes redirectAttributes) { 
     model.put("list", new ArrayList<String>()); 
     redirectAttributes.addFlashAttribute("list", new ArrayList<String>()); 
     return "redirect:/second"; 
    } 

    @RequestMapping("/second") 
    String second(ModelMap model, final RedirectAttributes redirectAttributes) { 
     List list = (List) model.get("list"); 
     list.add("A"); 
     redirectAttributes.addFlashAttribute("list", list); 
     return "redirect:/third"; 
    } 

    @RequestMapping("/third") 
    String third(ModelMap model, final RedirectAttributes redirectAttributes) { 
     List list = (List) model.get("list"); 
     list.add("B"); 
     redirectAttributes.addFlashAttribute("list", list); 
     return "end"; 
    } 
+0

>> Нужно ли пользователю видеть данные, размещенные на модели для первой и/второй страницы? Да, мне нужно сохранить модель. – user3163426

+0

И я не могу использовать JS. – user3163426

+0

Да, все работает нормально. – user3163426

0

я предлагаю, что вы посмотрите на Spring Webflow. Скопировано из описания проекта:

Сладкое пятно для Spring Web Flow являются отслеживанием состояния веб-приложений с помощью управляемой навигации [...] эти сценарии имеют в общем один или более из следующих признаков:

  • Существует четкое начало и конечная точка.
  • Пользователь должен пройти набор экранов в определенном порядке.
  • Изменения не доработаны до последнего шага.
  • После завершения не должно быть возможно повторить операцию случайно
Смежные вопросы