我有兩個型號: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