如何使用整个页面的自定义验证器类?

时间:2012-11-14 07:08:13

标签: jsf-2

我有3个文本框(id s表示 - A,B,C)。我已将f:validator validatorId="abc"与我的输入文本框(例如id - 'A')联系在一起。

现在问题是,我可以获得用户为文本框B&输入的任何值吗?我的验证器类中的C?

另外,有没有办法在提交过程中一次性在验证器类中对整个页面进行验证,而不是将f:validator分别关联到每个组件?

1 个答案:

答案 0 :(得分:0)

关于你的第二个问题我根本不知道。[问BalusC;)]
对于您的第一个问题是,您可以获取文本框B&的值。 C。 为此,您必须将这些值作为文本框A 的属性传递。 请参阅以下示例。 文本框A 引入了两个属性,其他文本框的值已被指定为这些属性的值。

<h:form>
  <h:inputText id="txtA">
    <f:validator validatorId="textValidator"/>
    <f:attribute name="attrib_textB" value="#{myBean.textB}"/>
    <f:attribute name="attrib_textC" value="#{myBean.textC}"/>
  </h:inputText>

  <h:inputText value="#{myBean.textB}">
    <a4j:support event="onchange"/>
  </h:inputText>

  <h:inputText value="#{myBean.textC}">
    <a4j:support event="onchange"/>
  </h:inputText>

  <a4j:commandButton value="Save"/>
</h:form>

现在在验证器类中,您可以访问这些变量。

public void validate(FacesContext arg0, UIComponent arg1, Object arg2) throws ValidatorException {
    String textA = (String) arg2;//value of text box A
    String textB = (String) arg1.getAttributes().get("attrib_textB");//value of text box B
    String textC = (String) arg1.getAttributes().get("attrib_textC");//value of text box C
}

这就是全部。请注意,我的“ MyBean ”类具有 textA textB 字符串字段的getter和setter方法。