2011-11-25 84 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