首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有自定义验证丢失值的Spring Annotation

带有自定义验证丢失值的Spring Annotation
EN

Stack Overflow用户
提问于 2011-04-04 01:13:20
回答 1查看 1.7K关注 0票数 1

我是Spring的新手。我遇到的问题是,当我从验证返回时,我的表单没有填充它的原始值。我之所以实现Validator接口(而不是使用验证注释),是因为我检查数据库中是否存在用户名。这是我的代码(省略了html标签)。

JSP:

代码语言:javascript
复制
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<form:form action="register.html" commandName="userCommand" method="POST">
   <form:errors path="*" cssClass="redBold"/>
   Username: 
      <form:input path="username"/><form:errors path="username" cssClass="error" />
   Password:
      <form:password path="password"/>
   Retype password: 
      <form:password path="password2"/>
   Sex:
      <form:radiobutton path="sex" value="F" label="Female"/>
      <form:radiobutton path="sex" value="M" label="Male"/>
   Date of birth:   
      <form:select path="dobDay" items="${dobDays}"/>
      <form:select path="dobMonth" items="${dobMonths}"/>
      <form:select path="dobYear" items="${dobYears}"/>
   Postcode:
      <form:input path="postcode"/>
   <input type="submit" value="Register" class="button"/>
</form:form>

控制器:

代码语言:javascript
复制
@Controller
@RequestMapping("/register.*")
public class UserRegistrationController {
   @RequestMapping(method = RequestMethod.POST)
   public ModelAndView submitForm(HttpServletRequest request, @ModelAttribute("userCommand") User user, BindingResult result) throws Exception {
      UserRegistrationValidator validator = new UserRegistrationValidator();
      validator.validate(user, result);
      if(result.hasErrors()){
         // when returning from here I dont see values in the JSP form 
         return new ModelAndView("redirect:/register.html","userCommand",user);
      }
        // more code 
        return new ModelAndView("redirect:/home.html");
    }
}

验证器:

代码语言:javascript
复制
@Component
public class UserRegistrationValidator implements Validator {
   private UserService userService;
   @Autowired
   public void setUserService(UserService userService) {
      this.userService = userService;
   }
   @Override
      public boolean supports(Class clazz) {
      return User.class.equals(clazz);
   }
   @Override
   public void validate(Object obj, Errors error) {
      User user = (User) obj;
      ValidationUtils.rejectIfEmpty(error, "username", "mandatory");
      if (userService.exists(user.getUsername()){
         error.rejectValue("username", null, "*");
      }
      if (user.getPostcode() == null || "".equals(user.getPostcode().toString())){
         error.rejectValue("postcode", null, "*");
      }
   }
}

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-04 09:03:20

只要您使用重定向,userCommand就不会传递给重定向的url。

提交的命令无效时,请勿尝试重定向

代码语言:javascript
复制
return new ModelAndView("register.html","userCommand",user);

或者,如果您仍然希望使用重定向,可以将userCommand保存到会话中,但我认为这不是一个好做法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5531128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档