【发布时间】:2011-10-05 08:15:05
【问题描述】:
我在创建一个在填写表单时会重新加载同一页面的 Spring 控制器时遇到问题。 我想要实现的是一个更改密码的页面。它应该要求输入旧密码、新密码和重新输入的新密码。当用户填写所有内容并提交表单时,操作应该是同一页面,并且控制器应该能够显示“密码不匹配”或“密码成功更改”之类的内容。 我知道如何通过使用多个控制器来实现这一点,但我认为使用一个控制器会更好。
下面是我的控制器:
package controllers;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import models.Password;
@Controller
public class ChangePassword {
@RequestMapping(value = "/changepassword", method = RequestMethod.GET)
public ModelAndView changePassword(@ModelAttribute("changepassword")Password password, BindingResult result) {
if(password.isEmpty())
{
return new ModelAndView("changepassword", "command", new Password());
}
else if(password.isValid())
{
return new ModelAndView("changepassword", "message", "The password was successfully changed!");
}
else{
return new ModelAndView("changepassword", "message", "The passwords did not match and/or the password was not 8 at least 8 characters long.");
}
}
页面第一次加载时会正确显示表单,但如果将密码留空并提交,则 glassfish 会显示:
“org.springframework.web.util.NestedServletException: 请求处理失败;嵌套异常是 java.lang.IllegalStateException: Bean name 'command' 的 BindingResult 和普通目标对象都不能用作请求属性”
我不明白为什么会发生这种情况,我认为它应该像第一次访问一样显示表单。
事实上,我需要的是向查看器提供密码模型以及一些文本(错误消息或成功消息)。我见过有人将地图返回给查看器,但我没有成功。
【问题讨论】: