java – spring mvc嵌套模型验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – spring mvc嵌套模型验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2976字,纯文字阅读大概需要5分钟。
内容图文
![java – spring mvc嵌套模型验证](/upload/InfoBanner/zyjiaocheng/816/56d9254690384a2888daa6b085cbcb4c.jpg)
我有两个模型:用户,项目
public class Project{
private int id;
@NotEmpty(message="Project Name can not be empty")
private String name;
private User manager;
private User operator;
//getter/setter omitted
}
public class User{
private int id;
private String name;
//omit other properties and getter/setter
}
现在,当我创建一个新项目时,我将向ProjectController提交以下参数:
项目名称= JHON和放大器; manager.id = 1&安培; operator.id = 2 …
然后我将创建一个新的Project对象并将其插入到db.
但是我必须验证管理器的id和运算符是否有效,也就是说如果用户表中存在匹配的id,我将验证它.
所以我想知道如何实现这种验证?
update1:??使用验证器
这是创建新项目的表单:
<sf:form method="${project.id==0?'post':'put'}" commandName="project" action="${context}${action}">
Manager:<sf:input path="manager.id" /> <sf:errors path="manager.id" /> <br />
Operator:<sf:input path="operator.id" /> <sf:errors path="operator.id" /> <br />
Name:<sf:input path="name" /> <sf:errors path="name" /> <br />
<input type="submit" value="Submit" />
</sf:form>
@Override
public void validate(Object obj, Errors errors) {
User user = (User) obj;
int id=user.getId();
User u=userDao.query(id);
if(u==null){
errors.rejectValue("id", "user does not exist!");
}
}
看来这个验证器有效.
但是,错误消息无法在窗体中显示.
然后通过调试我检查结果对象,我发现了这个:
org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'project' on field 'id': rejected value [0]; codes [user does not exist!.project.id,user does not exist!.id,user does not exist!.int,user does not exist!]; arguments []; default message [null]
Field error in object 'project' on field 'id': rejected value [0]; codes [user does not exist!.project.id,user does not exist!.id,user does not exist!.int,user does not exist!]; arguments []; default message [null]
似乎结果确实有错误,但它的路径是project.id,而在我的表单中它是project.manager.id
怎么修?
解决方法:
这是一种可能的解决方案.
创建以下类:
...
import org.springframework.validation.Validator;
...
@Component
public class ProjectValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Project.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Project project = (Project) target;
/* Do your checks here */
...
if (managerIdDoesNotMatch) {
errors.rejectValue("manager.id", "your_error_code");
}
...
if (operatorIdDoesNotMatch) {
errors.rejectValue("operator.id", "your_error_code");
}
...
}
}
在您的控制器中执行以下操作:
...
public class ProjectController {
@Autowired
ProjectValidator projectValidator;
...
@RequestMapping(...)
public String yourCreateMethod(..., @ModelAttribute @Valid Project project, BindingResult result) {
projectValidator.validate(project, result);
if (result.hasErrors()){
// do something
}
else {
// do something else
}
}
}
这应该让你开始.您可以以不同方式实例化/设置验证器,拥有一个用户子验证器,但您可以获得一般的想法.
参考文献:
> Latest Spring validation documentation
> This Stack Overflow post about how to perform validation
内容总结
以上是互联网集市为您收集整理的java – spring mvc嵌套模型验证全部内容,希望文章能够帮你解决java – spring mvc嵌套模型验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。