我遇到了PrimeFaces的问题。这里是我的XHTML代码:PrimeFaces selectOneMenu在valueChangeListener和ajax监听器中都有空的新值
<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>
这里是我的豆代码:
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方法对于新值都会得到一个“空值”(使用调试器,我可以看到ValueChangeEvent
中的旧值为“0”,根据我的selectItems,这是正确的)。
解决此问题的任何线索?我真的不明白,我看见我使用几个时间在这个网站的代码...
技术信息:JBoss的EAP 6.0,钻嘴鱼科2.1.7-JBoss的,PrimeFaces 4.0
编辑:我是想知道这是否是JBoss中嵌入的jsf-impl库中的一个bug。我更新到Mojarra 2.1.18-jboss,但问题是严格相同的:一个null
值通过ajax监听器放入我的grille
对象中,并且getNewValue()
对象也返回对象的valueChangeEvent
。
我的代码中存在两个不同的问题,一个用我提供的代码不可见。你对'getSubmittedValue()'是正确的,它确实总是'null',因为在更新模型值阶段之后触发'AjaxBehaviorEvent'。我必须直接从我的模型中检索选定的ID。至于我的'selectItems',那不是问题,因为我的'getBranche()'方法有这样的签名:'public List getBranche(){' –
Wis
2014-09-23 08:15:12
问题的第二部分是我的'p:dialog'是不以任何形式在页面中。出于某些原因,我必须将我的'p:confirmDialog'放在任何形式之外。我认为我应该对'对话框做同样的事情,这确实是一个坏主意。在表单之外,没有值被提交给服务器。从我提供的代码中看不到这部分。 – Wis 2014-09-23 08:18:01