【问题标题】:Ajax and Validator is not working togetherAjax 和 Validator 不能一起工作
【发布时间】:2012-02-17 21:54:06
【问题描述】:

当我尝试向包含 JSF 中的 ajax 侦听器的 selectOneMenu 元素插入验证器时,ajax 侦听器开始无法正常工作。以下是我正在谈论的特定问题的 JSF 片段:

<h:selectOneMenu id="metalCodes" converter="metalCodeConverter" required="true" requiredMessage="#{lang.metalStockIntroducing_metalCode_req_txt}" value="#{metalStockIntroducingProcessesBean.metal.metalCode}">
        <f:selectItem itemLabel="Please select..." noSelectionOption="true" />
        <f:selectItems value="#{metalStockIntroducingProcessesBean.metalCodesMenu}" />
        <f:ajax listener="#{metalStockIntroducingProcessesBean.changeMetalType}" event="change" execute="metalCodes" render="metalTypesMenu" immediate="false"/>
        <f:validator validatorId="densityValidator"/>
</h:selectOneMenu>

为了使验证器和 ajax 侦听器在 h:selectOneMenu JSF 元素中协同工作,您的朋友会推荐我做什么?

【问题讨论】:

  • 确定验证器不只是抛出验证器异常?顺便说一句,您标记了“ajax4jsf”,但我在任何地方都没有看到 a4j 标记。您是否真的使用 Ajax4jsf(RichFaces 的一部分)?如果您不确定它是什么,请阅读标签描述/信息。
  • 亲爱的 BalusC,您是对的。我对 JSF 的了解不足让我写了一些误导性的东西。当我看到页面上的标签时,正确的应该是 A4J。但是,我错了,应该是Ajax。对于误导性信息,我们深表歉意。我不会重蹈覆辙。顺便说一句,你认为我应该怎么做才能解决问题?谢谢...
  • 我已经编辑了标签并删除了 A4J 标签。
  • 你确定验证器不只是抛出验证器异常吗?
  • 实际上,我正在调试模式下开发我的代码,它永远不会落入该组件的验证器类。当我将验证器放入组件时,ajax 侦听器开始无法正常工作,而没有验证器则完全可以正常工作。我在不包括 ajax 侦听器的不同组件中使用了验证器,看起来它工作正常而没有抛出异常,我可以在调试中观察整个过程(实际上是调试)。我认为我无法使其与 ajax 侦听器协作工作,反之亦然。

标签: jsf validation


【解决方案1】:

他们应该一起工作得很好。仅当验证器抛出异常时,才会调用 ajax 侦听器方法。确保您的验证器没有错误地执行此操作。确保您也重新渲染了与输入组件关联的&lt;h:message&gt;&lt;h:messages&gt;,以便在ajax 请求期间收到有关任何面孔消息的通知。或者至少阅读服务器日志,任何排队但未显示的面孔消息都将记录在那里。

【讨论】:

  • 现在我意识到,对 selectOneMenu 组件使用验证器策略不太适合我,因为它在每次更改中的动态行为都是我在您发出警告之前没有意识到的。我应该为我的案例使用属性策略。但是,在检索验证器类中的属性值时,我遇到了另一个问题。我将打开另一个问题。感谢 BalusC 的出色帮助。
猜你喜欢
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2014-01-07
  • 2019-08-17
相关资源
最近更新 更多