为了清晰起见,使用其他信息进行了编辑
我们正在将应用程序从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的listener属性由于某种原因没有处理事件。
浏览器控制台或应用程序或服务器日志中未报告任何错误 - 该方法永远不会被调用。此外,h:消息不会显示任何错误。
另外,我们尝试使用a4j:ajax和valueChangeListener。 a4j:ajax的行为与f相同:ajax - 未调用托管bean中定义的方法; valueChangeListener对我们不起作用,因为它是由一个不同于f:ajax监听器的事件触发的,我们需要在单选按钮中更改选择以影响在同一表单上选择ah:selectManyCheckbox组件。
答案 0 :(得分:0)
对于新手:我有几乎相同的问题,实际上已经用尽互联网,没有解决方案。
从jsf 2.2(。?)迁移到2.3时解决。
顺便说一句,@#$%!@#$ *,其他方式丢失了2天,所以把这作为学习/记忆的难点,面对这样的问题时,总是首先升级你的图书馆......
附录:不要盲目更新你的图书馆。
正如Jon Bates所指出的那样,每一次改变都带来了将新错误引入系统的潜力,虽然旧的与新的主题本身存在争议,但人们普遍认为良好的做法,当处理已经存在的问题时证明系统稳定,是将变化保持在最低限度,直至归档新的预期目标。这是好图书馆通常拥有主要,次要和修订号码的原因之一,看看它们。