2009-09-01 103 views
1

我正在嘗試爲我的項目創建一個簡單的自定義驗證器,而且我似乎無法找到有條件地驗證條件的方法。根據SEAM中另一個字段的值,我如何根據需要驗證字段?

下面是我有:

一個輔助/支持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) { } 
} 

回答

1

我不得不this post涵蓋了類似的問題。如果您持有豆這些值始終是相同的,那麼你可能只是它的當前實例爲你使用Seam您的驗證不需要那麼複雜加載到您的驗證與

//Assuming you have the @Name annotation populated on your Bean and a Scope of CONVERSATION or higher 
AdSiteHelper helper = (AdSiteHelper)Component.getInstance("adSiteHelper"); 

也。您不需要接口,它可以像

@Name("requiredIfSelectedValidator") 
@Validator 
public class RequiredIfSelectedValidator implements javax.faces.validator.Validator { 
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
     //do stuff 
    } 
} 
相關問題