2011-11-25 85 views

回答

6

您可以將選定的下拉列表的值作爲輸入組件的屬性傳遞,以便驗證器可以抓取它。

E.g.

<h:selectOneMenu binding="#{menu}" value="#{bean.item}"> 
    <f:selectItems value="#{bean.items}" /> 
</h:selectOneMenu> 
<h:inputText value="#{bean.input}"> 
    <f:attribute name="item" value="#{menu.value}" /> 
    <f:validator validatorId="inputValidator" /> 
</h:inputText> 

@FacesValidator("inputValidator") 
public class InputValidator implements Validator { 

    @Override 
    public void validate(FacesContext context, UIComponent component, Object value) { 
     Object item = component.getAttributes().get("item"); 
     // ... 
    } 

} 

注意,成分事項的順序。 JSF按它們在視圖中出現的順序處理UIInput組件。如果將下拉組件放置在之後輸入文本組件中,則需要通過#{menu.submittedValue}作爲屬性,但此時該值尚未轉換。如果需要,您可以在兩個組件之後放置一個<h:inputHidden>解決方法,並將驗證程序放在那裏。

+0

謝謝,BalusC。有效!! 希望我能爲你的解決方案做+50。你搖滾! – srock

+0

不客氣。 – BalusC