2009-09-01 3 views
1

Я пытаюсь создать простой пользовательский валидатор для моего проекта, и я не могу найти способ получить шов для проверки условных условий.Как я могу проверить поле по мере необходимости в зависимости от значения другого поля в SEAM?

Вот что я получил:

хелпер/бэк боб (который не является юридическим лицом)

@RequiredIfSelected 
public class AdSiteHelper { 
    private Date start; 
    private Date end; 
    private boolean selected; 
    /* getters and setters implied */ 
} 

Что мне нужно для «запуска» и «конец» будет необходимо, если и только если выбрано значение true.

Я попытался создать пользовательский валидатор на целевой ТИП, но шов, похоже, не хочет его подбирать и проверять. (Может быть, потому что это не юридическое лицо?)

вот общая идея моего аннотаций для начала:

@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) { } 
} 

ответ

1

У меня была аналогичная проблема, покрытую this post. Если Бин держит эти значения всегда то же самое, то вы можете просто загрузить текущий экземпляр ее в свой валидатора с

//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 
    } 
}