私は2つのモデルを持っています:User,Project
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オブジェクトを作成し、それを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
直し方?