【发布时间】:2014-07-31 22:09:05
【问题描述】:
我有一个问题,让我介绍一下: 我有一个注册新用户的表格,然后表格发送信息一个地址:“.../add-user.htm”。在控制器中,我有这样的地址映射:
@RequestMapping(value = "add-user", method = RequestMethod.POST)
public ModelAndView addUser(@ModelAttribute("user") User user) {
ModelAndView modelAndView;
List<String> errors = userService.userRegisterErrors(user);
if(errors.size() == 0) {
//some code here...
modelAndView = new ModelAndView("index");
List<String> info = new ArrayList<String>();
info.add("Registration has been successful");
info.add("Verification e-mail has been sent to Your e-mail address");
modelAndView.addObject("info", info);
} else {
//some code here..
modelAndView = new ModelAndView("user/register");
modelAndView.addObject("user", user);
modelAndView.addObject("errors", errors);
}
return modelAndView;
}
在索引页面上,我想显示信息/错误消息取决于注册是否成功。
例如,假设注册是正确的。然后,我想查看包含注册信息的索引页面,该页面运行良好。问题在于在索引页面上显示的 URL - 它不是我希望的 /index.htm,而是 /add-user.htm 就像控制器定义的那样。这是错误的,因为如果我按下“f5”按钮,它会迫使我“重新注册”用户。
我在返回 modelAndView 之前尝试使用此方法:modelAndView.setViewName("index.htm"); 但什么也没发生。我可以重定向到控制器中的索引页面,但是我会丢失 modelAndView 中的所有对象,因此不会显示任何信息。我的另一个想法是使用标志来表示信息和错误,但这会非常复杂。你有解决方案吗?谢谢。
【问题讨论】:
-
RedirectAttributes 可以满足您的需求吗?从 3.1 开始可用。
-
好像是这样,我不知道,谢谢。
-
嗯,所以它不适合我的需要。我以为它可以传输对象但它只用于字符串,我需要传输List和我自己的类,可以这样做吗?
-
docs.spring.io/spring-framework/docs/current/javadoc-api/org/… 似乎将对象作为值,即不仅仅是字符串。为什么你认为它只适用于字符串?
-
我尝试使用 addObject,但它抛出了无法将 myOwnClass 转换为 String 的异常。
标签: spring-mvc