我正在尝试为我的项目创建一个简单的自定义验证器,我似乎无法找到一种方法来获取有条件地验证事物的接缝。
这就是我所拥有的:
辅助/支持bean(不是实体)
@RequiredIfSelected
public class AdSiteHelper {
private Date start;
private Date end;
private boolean selected;
/* getters and setters implied */
}
当且仅当选择为真时,我需要“开始”和“结束”。
我尝试在TYPE目标上创建自定义验证器,但是接缝似乎不想拿起并验证它。 (也许是因为它不是一个实体?)
这是我的初学者自定义注释的一般概念:
@ValidatorClass(RequiredIfSelectedValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiredIfSelected {
String message();
}
public class RequiredIfSelectedValidator implements Validator<RequiredIfSelected>, Serializable {
public boolean isValid(Object value) {
AdSiteHelper ash = (AdSiteHelper) value;
return !ash.isSelected() || (ash.getStart() && ash.getEnd());
}
public void initialize(RequiredIfSelected parameters) { }
}
答案 0 :(得分:1)
this post涵盖了类似的问题。如果持有这些值的Bean始终相同,那么您可以使用
将其当前实例加载到Validator中//Assuming you have the @Name annotation populated on your Bean and a Scope of CONVERSATION or higher
AdSiteHelper helper = (AdSiteHelper)Component.getInstance("adSiteHelper");
同样,当您使用Seam时,您的验证器不需要那么复杂。您不需要界面,它可以像
一样简单@Name("requiredIfSelectedValidator")
@Validator
public class RequiredIfSelectedValidator implements javax.faces.validator.Validator {
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
//do stuff
}
}