【发布时间】:2015-04-17 21:33:40
【问题描述】:
在我的 xhtml 页面中,我有 inputText 字段,其中附加了两个验证器。此外,还附加了 ajax 事件“blur”,用于在从字段切换焦点时触发验证。代码如下:
<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 字段后选择项目。请问有什么建议,我应该更改或添加什么?
附言表单提交验证效果很好。
【问题讨论】:
-
我不明白这是什么意思,“在焦点后选择项目的验证器不再在
personName字段上”。<t:inputText>来自哪个库?是来自战斧吗?这些验证器是否被调用/触发并工作?假设您使用例如@FacesValidaror(value="femalePersonValidator")指定了这些验证器类,在这种情况下,您只需要指定validatorId="femalePersonValidator"。不需要完全限定的类名。仅当您使用<p:ajaxStatus>时,才需要考虑与<p:ajax>关联的global属性。 -
@Tiny 如果从 selectOneMeny 中选择了 female,则启用
FemalePersonValidator并用于验证 name 字段,同时禁用MalePersonValidator,如果从 selectOneMeny 中选择了 male,则启用MalePersonValidator并用于验证 name 字段,而禁用FemalePersonValidator。这在提交表单时效果很好。字段的 Ajax 验证是行不通的。t:inputText来自战斧。
标签: ajax validation jsf primefaces