如何使用p:ajax在blur事件上有条件地运行jsf Validator?

时间:2015-04-17 21:33:40

标签: ajax validation jsf primefaces

在我的xhtml页面中,我有inputText字段,附加了两个Validator。还有ajax事件"模糊"附加用于在从字段切换焦点时触发验证。这是代码:

<t:selectOneMenu id="locateRecordBy" value="#{personBean.locateRecordBy}">
    <f:selectItems value="#{personBean.locateRecordByItems}"/>
</t:selectOneMenu>

<t:inputText id="personName"
   value="#{personBean.name}"
   required="true" 
   requiredMessage="Name is required.">
        <p:ajax event="blur" partialSubmit="true" process="@this" update="nameerror" global="false" />
        <f:validator disabled="#{param['PersonForm:locateRecordBy'] == 'FEMALE'}" validatorId="com.myapp.validators.MalePersonValidator"/>
        <f:validator disabled="#{param['PersonForm:locateRecordBy'] == 'MALE'}" validatorId="com.myapp.validators.FemalePersonValidator"/>
</t:inputText>

所以我想在personName字段上不再关注焦点后根据选择项验证personName与相应的Validator。请提出任何建议,我应该更改或添加什么?

P.S。在表单提交验证工作上非常好。

1 个答案:

答案 0 :(得分:0)

实际上我发现代码中缺少了什么。我添加了locateRecordBy componnent以便用ajax处理,所以不要这样:

<p:ajax event="blur" partialSubmit="true" process="@this" update="nameerror" global="false" />

我有这个:

<p:ajax event="blur" partialSubmit="true" process="@this, locateRecordBy" update="nameerror" global="false" />

基本上我忘了指示JSF处理locateRecordBy以及为什么locateRecordBy参数从未出现在ajax请求中,这导致两个验证器都被禁用并验证{{1}要跳过的字段。