Как передать атрибуты модели из одного controllerа Spring MVC другому controllerу?

Я перенаправляюсь от controllerа к другому controllerу. Но мне также нужно передать атрибуты модели второму controllerу.

Я не хочу ставить модель в сессию.

Пожалуйста помоги.

Я думаю, что самый элегантный способ сделать это – реализовать пользовательский Flash Scope весной MVC.

основная идея флэш-области – хранить данные от одного controllerа до следующего перенаправления во втором controllerе

Пожалуйста, обратитесь к моему ответу на вопрос о настраиваемой области:

Весной MVC

Единственное, что отсутствует в этом коде, это следующая конфигурация xml:

      

Я использую весну 3.2.3, и вот как я решил подобную проблему.
1) Добавлены redirectAttributes redirectAttributes в список параметров метода в controllerе 1.

 public String controlMapping1( @ModelAttribute("mapping1Form") final Object mapping1FormObject, final BindingResult mapping1BindingResult, final Model model, final RedirectAttributes redirectAttributes) 

2) Внутри метода добавлен код для добавления атрибута flash для redirectAttributes redirectAttributes.addFlashAttribute("mapping1Form", mapping1FormObject);

3) Затем во втором параметре метода contoller, аннотированном с помощью @ModelAttribute, для доступа к атрибутам перенаправления

 @ModelAttribute("mapping1Form") final Object mapping1FormObject 

Вот пример кода из controllerа 1:

 @RequestMapping(value = { "/mapping1" }, method = RequestMethod.POST) public String controlMapping1( @ModelAttribute("mapping1Form") final Object mapping1FormObject, final BindingResult mapping1BindingResult, final Model model, final RedirectAttributes redirectAttributes) { redirectAttributes.addFlashAttribute("mapping1Form", mapping1FormObject); return "redirect:mapping2"; } 

От Contoller 2:

 @RequestMapping(value = "/mapping2", method = RequestMethod.GET) public String controlMapping2( @ModelAttribute("mapping1Form") final Object mapping1FormObject, final BindingResult mapping1BindingResult, final Model model) { model.addAttribute("transformationForm", mapping1FormObject); return "new/view"; } 

Использование только redirectAttributes.addFlashAttribute(...) -> "redirect:..." работало, не нужно было «повторно вставлять» атрибут модели.

Спасибо, аборский!

Вы можете решить эту проблему, используя org.springframework.web.servlet.mvc.support.RedirectAttributes.

Вот мой образец controllerа.

 @RequestMapping(method = RequestMethod.POST) public String eligibilityPost( @ModelAttribute("form") @Valid EligibiltyForm form, Model model, RedirectAttributes redirectAttributes) { if(eligibilityService.validateEligibility(form)){ redirectAttributes.addFlashAttribute("form", form); return "redirect:"; } return "eligibility"; } 

подробнее читайте в моем блоге по адресу http://mayurshah.in/596/how-do-i-redirect-to-page-keeping-model-value

Добавьте все атрибуты модели в URL-адрес перенаправления в качестве строки запроса.

Может быть, вы могли бы сделать это так:

Не используйте модель в первом controllerе. Храните данные в другом общем объекте, который затем может быть извлечен вторым controllerом.

Посмотрите на этот и этот пост. Речь идет о подобной проблеме.

PS

Вы могли бы попробовать использовать сессионный компонент для этих общих данных …

У меня была такая же проблема.

С RedirectAttributes после обновления страницы мои атрибуты модели с первого controllerа были потеряны. Я думал, что это ошибка, но потом я нашел решение. В первом controllerе я добавляю атрибуты в ModelMap и делаю это вместо «перенаправления»:

return ” forward : / nameOfView”;

Это перенаправит ваш другой controller, а также сохранит атрибуты модели с первого.

Надеюсь, это то, что вы ищете. Извините за мой английский

Если вы хотите просто передать все атрибуты для перенаправления …

 public String yourMethod( ...., HttpServletRequest request, RedirectAttributes redirectAttributes) { if(shouldIRedirect()) { redirectAttributes.addAllAttributes(request.getParameterMap()); return "redirect:/newPage.html"; } } 

Я использовал @ControllerAdvice , пожалуйста, проверьте, доступен ли Spring 3.X; Я использую его в Spring 4.0.

 @ControllerAdvice public class CommonController extends ControllerBase{ @Autowired MyService myServiceInstance; @ModelAttribute("userList") public List getUsersList() { //some code return ... } } 

Используя @ModelAttribute, мы можем передать модель от одного controllerа к другому controllerу

[Вход в первый controller] [1]

[]: http://sofru.miximages.com/redirect/rZQe5.jpg с первого controllerа jsp-страницы связывает данные формы с атрибутом @ModelAttribute для User Bean

 @Controller public class FirstController { @RequestMapping("/fowardModel") public ModelAndView forwardModel(@ModelAttribute("user") User u) { ModelAndView m=new ModelAndView("forward:/catchUser"); m.addObject("usr", u); return m; } } @Controller public class SecondController { @RequestMapping("/catchUser") public ModelAndView catchModel(@ModelAttribute("user") User u) { System.out.println(u); //retrive the data passed by the first contoller ModelAndView mv=new ModelAndView("userDetails"); return mv; } } 
  • Необходимо перенаправить весь трафик на https
  • http до https через .htaccess
  • .htaccess перенаправить www на не-www с SSL / HTTPS
  • Как получить URL-адрес реферера в действии ASP.NET MVC?
  • Перенаправление на указанный controller и действие в фильтр действий asp.net mvc
  • htaccess перенаправляет для не-www как http, так и https
  • Как выполнять динамические переадресации URL в Struts 2?
  • Давайте будем гением компьютера.