У меня есть две модели: 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...
Тогда я создаст новый объект проекта и добавит его в db.
Однако я должен проверить идентификатор менеджера, и оператор действителен, то есть я буду проверять это, если в таблице пользователя есть сопоставленный идентификатор.
Итак, я хочу знать, как реализовать такую валидацию?
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