【问题标题】:jsf valuechangelistener not firing on checkbox deselectjsf valuechangelistener 未在复选框取消选择时触发
【发布时间】:2018-04-30 20:44:55
【问题描述】:

我在带有 valuechangelistener 的表单上有一个 primefaces 复选框。支持 bean 方法在复选框选择时被调用,但在取消选择时不会被调用。

我在我的应用程序的其他地方使用了几乎相同的代码,并且在选择和取消选择时都可以正常工作。

<p:selectBooleanCheckbox value="#{shareoutSlip.processed}" 
                              valueChangeListener="#{orderFormBean.handleShareoutSlipProcessed}" >
    <p:ajax />
</p:selectBooleanCheckbox>

这是 valueChangeListener 方法(它现在所做的只是向控制台打印一条消息):

public void handleShareoutSlipProcessed(ValueChangeEvent vcEvent) {
    logger.info("Shareout Slip Processed");
}

我的表单上是否还有其他内容可能会干扰取消选中复选框时调用的方法?我在表单上放了一个 h:messages 标记,但我没有看到任何验证消息。

【问题讨论】:

  • 尝试在 ajax 标签上使用监听器而不是 valueChangeListener?你的JSF版本和imple和PF版本是什么?
  • 我正在使用 JSF 2.2,在 Tomcat 8 上实现的 PrimeFaces 6.1。感谢您的想法。我将按照您的建议查找如何将侦听器附加到 ajax 标记。奇怪的是,该技术应该在一页上正常工作,但在这一页上却不行。不同的处理程序具有相同的签名并且在同一个 bean 中!这是我退出 JSF 的原因之一,因为我一直遇到这样的“巫毒”。
  • 值得注意的是,您遇到了伏都教,而我没有……在现代,很少需要 valuechangelisteners。我很快尝试了其中一个大肆宣传的 JavaScript 框架,但它需要大量额外的代码才能实现相同的功能。包括大量用于严肃的 business2business 应用程序的 javascript 验证安全性等
  • 如果您不发布实际的minimal reproducible example,我们甚至很难尝试复制。如果它在您认为 100% 相同的其他情况下工作,那么有两个可能的原因:1:它们不是 100% 相同,2:实际运行的代码不是您认为正在运行的代码(部署问题)。两者实际上都不是 JSF 可以做的……
  • 你在你的问题中说:几乎相同......那么有什么区别?拥有不同的组件并不“几乎”相同......而是一个主要区别......

标签: jsf primefaces


【解决方案1】:

您是否尝试在p:ajax 标记内调用此方法?

<p:selectBooleanCheckbox value="#{shareoutSlip.processed}">
        <p:ajax event="change" listener="#{orderFormBean.handleShareoutSlipProcessed}" />
    </p:selectBooleanCheckbox>

【讨论】:

  • 这就是我在第一条评论中所说的
  • 对不起,我刚刚看到你忘记了 event="change"
猜你喜欢
  • 2011-09-21
  • 2011-03-24
  • 1970-01-01
  • 2011-10-10
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多