我有两个型号:User,Project
Spring MVC的嵌套模型验证
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:
projects?name=jhon&manager.id=1&operator.id=2...
然后我将创建一个新的Project对象并将其插入到数据库中。
但是,我必须验证经理和运营商的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
如何修理?
你如何为你的'Project'进行验证?是否有定制的验证器?你使用JSR-303验证吗? – Pao
没有验证器。我不知道如何做到这一点。 – hguser
[Spring doc on validation](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/validation.html)应该会给你一个启动 – Pao