为清楚起见,编辑了附加信息
我们正在将应用程序从 JBoss 5 迁移到 Tomee 7.0.1+。在 Tomee 上,我们使用 MyFaces 2.2.10 和 RichFaces 4.2.0(在 Jboss 上,我们使用 Mojarra JSF 而不是 MyFaces)。
我们遇到了 f:ajax 监听器没有触发单选按钮列表中的值更改的问题。这是我们的代码:
<h:selectOneRadio value="#{managedBean.paramsType}"
layout="pageDirection">
<f:selectItem itemValue="Item1" itemLabel="Item1" />
<f:selectItem itemValue="Item2" itemLabel="Item2" />
<f:ajax render="@form" execute="@form" listener="#{managedBean.checkSelection}" />
</h:selectOneRadio>
<h:selectManyCheckbox value="#{managedBean.objectList}" layout="pageDirection">
<f:selectItem itemValue="checkOption1" itemLabel="Option1" itemDisabled="#{managedBean.paramsType == 'Item3'}"/>
<f:selectItem itemValue="checkOption2" itemLabel="Option2" itemDisabled="#{managedBean.paramsType == 'Item1'}"/>
<f:selectItem itemValue="checkOption3" itemLabel="Option3" itemDisabled="#{managedBean.paramsType == 'Item2'}"/>
</h:selectManyCheckbox>
在托管 bean 中,checkSelection 方法具有以下签名:
public void checkSelection()
{
//update objectList (select or deselect items) based on radio button selection
}
在 TomEE 上运行应用程序时永远不会调用检查选择,但在 JBoss 上也一样(相同的代码)。
在 TomEE 上,我们尝试添加 AjaxBehaviorEvent 作为 checkSelection 方法的输入参数,但无论有没有这个参数,该方法都不会被调用。看起来 f:ajax 的侦听器属性由于某种原因没有处理事件。
浏览器控制台或应用程序或服务器日志中不会报告任何错误 - 该方法根本不会被调用。此外, h:messages 不会显示任何错误。
此外,我们尝试使用 a4j:ajax 和 valueChangeListener。a4j:ajax 的行为与 f:ajax 相同 - 不调用托管 bean 中定义的方法;valueChangeListener 对我们不起作用,因为它是由与 f:ajax 侦听器不同的事件触发的,我们需要更改单选按钮中的选择以影响对同一表单上 ah:selectManyCheckbox 组件的选择。