【发布时间】:2014-11-13 21:27:54
【问题描述】:
我遇到了 PrimeFaces 的问题。这是我的 XHTML 代码:
<p:selectOneMenu value="#{gCnewObjectBean.grille.branche}"
valueChangeListener="#{gCnewObjectBean.brancheChangedListener}"
update=":contentform :popup">
<f:selectItems value="#{gCnewObjectBean.branche}" />
<p:ajax update=":contentform :popup"
listener="#{gCnewObjectBean.brancheChangedListener}" />
</p:selectOneMenu>
这是我的 bean 代码:
public void brancheChangedListener(ValueChangeEvent event) {
Integer branche = (Integer) event.getNewValue();
// do populate the second select menu based on this value
}
public void brancheChangedListener(AjaxBehaviorEvent event) {
SelectOneMenu selectMenu = (SelectOneMenu) event.getSource();
Integer branche = (Integer) selectMenu.getSubmittedValue();
// do populate the second select menu based on this value
}
生成的 HTML 代码对于 primefaces 有点奇怪,HTML 选择组件是隐藏的。但是如果我用萤火虫看到它,它看起来像这样:
<select id="branche_input" name="branche_input">
<option value="0"></option>
<option value="1">Prestations prévoyance professionnelle</option>
<option value="2">Prestations prévoyance privée</option>
<option value="3">Prestations PRIRENT</option>
<option value="4">Gestion prévoyance professionnelle</option>
</select>
此代码是测试 BalusC 在 this post 上描述的两种解决方案(valueChangeListener 和 f:ajax)的一种方式。
当我在选择菜单中更改值时,两个监听器都会被触发,首先是valueChangeEvent,然后是AjaxBehaviorEvent,这正是我根据 BalusC 帖子所怀疑的。但是这两种 bean 方法都为新值获得了“null”(使用调试器,我可以看到 ValueChangeEvent 中的旧值是“0”,根据我的 selectItems 是正确的)。
有什么线索可以解决这个问题吗?我真的不明白,我在这个网站上看到了我多次使用的代码......
技术信息:JBoss EAP 6.0、Mojarra 2.1.7-jboss、PrimeFaces 4.0
编辑:我想知道这是否是嵌入在 JBoss 中的 jsf-impl 库中的错误。我更新到 Mojarra 2.1.18-jboss,但问题完全相同:ajax 侦听器将null 值放入我的grille 对象中,getNewValue() 对象也返回了null 值valueChangeEvent.
【问题讨论】:
标签: jsf-2 primefaces selectonemenu valuechangelistener