Java 如何使用注释设置验证上下文
假设我有一个actionJava 如何使用注释设置验证上下文,java,struts2,visitor,struts-validation,Java,Struts2,Visitor,Struts Validation,假设我有一个actionMyAction,有一个字段User,其中包含getter和setter 然后我有两个公开的公共方法,我想对对象用户使用访问者验证,但有两个不同的上下文,因此根据调用的方法,以两种不同的方式对用户进行验证 我只想使用注释,不使用validation.xml 参见示例 public class MyAction extends ActionSupport { private User user; public User getUser() {
MyAction
,有一个字段User
,其中包含getter和setter
然后我有两个公开的公共方法,我想对对象用户使用访问者验证,但有两个不同的上下文,因此根据调用的方法,以两种不同的方式对用户进行验证
我只想使用注释,不使用validation.xml
参见示例
public class MyAction extends ActionSupport {
private User user;
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user=user;
}
public string execute() {
//some code here ...
return SUCCESS;
}
@Validations(
visitorFields = {@VisitorFieldValidator(context="myContext1", fieldName="user", key="error.message", message="A default error message", shortCircuit=true)}
)
public string save() {
//some code here ...
return SUCCESS;
}
@Validations(
visitorFields = {@VisitorFieldValidator(context="myContext2", fieldName="user", key="error.message", message="A default error message", shortCircuit=true)}
)
public string update() {
//some code here ...
return SUCCESS;
}
//...
}
现在我想将上下文(myContext1和myContext2)指定到用户对象内的注释中,这样一些验证器在MyAction上调用save()方法时启动,而其他验证器在调用update()时启动
我想象这样的情况:
public class User implements Serializable {
private Integer id;
private String name;
@RequiredFieldValidator(context="myContext2", message = "You must enter a value for data.")
public void setId(Integer id) {
this.id=id;
}
@RequiredFieldValidator(context="myContext1", message = "You must enter a value for data.")
public void setName(String name) {
this.name = name;
}
//some code... getters, etc...
}
我希望这样做,例如,在创建操作(方法save())期间,名称是必需的,而在更新操作(方法update())期间,id是必需的。不幸的是,在我看来RequiredFieldValidator,所以Struts2中的任何其他验证器注释都不支持“上下文”字段
我知道我可以使用User-myContext1-validation.xml和User-myContext2-validation.xml文件(我没有尝试过,但我认为我已经理解了这是可以做到的),但我只想使用注释
您知道如何使用注释实现这一点吗?这是一个很好的问题,但我想混合方法最接近您想要的结果