【问题标题】:How to conditionally run jsf Validator on blur event with p:ajax?如何使用 p:ajax 有条件地在模糊事件上运行 jsf Validator?
【发布时间】: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 字段上”。 &lt;t:inputText&gt; 来自哪个库?是来自战斧吗?这些验证器是否被调用/触发并工作?假设您使用例如@FacesValidaror(value="femalePersonValidator") 指定了这些验证器类,在这种情况下,您只需要指定validatorId="femalePersonValidator"。不需要完全限定的类名。仅当您使用 &lt;p:ajaxStatus&gt; 时,才需要考虑与 &lt;p:ajax&gt; 关联的 global 属性。
  • @Tiny 如果从 selectOneMeny 中选择了 female,则启用 FemalePersonValidator 并用于验证 name 字段,同时禁用 MalePersonValidator ,如果从 selectOneMeny 中选择了 male,则启用 MalePersonValidator 并用于验证 name 字段,而禁用 FemalePersonValidator。这在提交表单时效果很好。字段的 Ajax 验证是行不通的。 t:inputText 来自战斧。

标签: ajax validation jsf primefaces


【解决方案1】:

实际上,我发现了我的代码中缺少的内容。我添加了locateRecordBy 组件以使用 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 请求中,这导致两个验证器都被禁用,personName 字段的验证被跳过。

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 2017-06-18
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多