【发布时间】:2012-03-26 15:27:33
【问题描述】:
我正在使用 MyFaces 2.0.12 和 RichFaces 3.3.3。当用户更改 h:selectOneMenu 的选择时,我需要在 BackBean (Session scope) 中调用两个不同的函数。以前我是这样做的:
<h:selectOneMenu
value="#{customer.recordsDisplayed}"
valueChangeListener="#{customer.onRecordsPerPageChange}"
onchange="submit()"
<f:selectItems value="#{customer.rppValues}" />
</h:selectOneMenu>
在backbean中:
public void onRecordsPerPageChange(ValueChangeEvent vce){
if(this.searchFlagAdvance)
searchMethodA();
else
searchMethodB();
}
我理解上述内容是错误的,因为您不打算在 ValueChangeEvent 阶段调用逻辑或更改 backbean 值。
所以我的问题是正确的方法是什么?由于上面的代码,我遇到了 backbean 值为 null 并且整个事情都平淡无奇的情况。
更新:
我将我的代码更改为以下代码并且运行良好。我只想知道以下是否是好的做法。
public void onRecordsPerPageChange(ActionEvent event) {
String value =(String) ((EditableValueHolder) event.getComponent().getParent()).getValue();
this.value = value;
if(searchFlagA)
searchMethodA();
else
searchMethodB();
}
并将 JSP 代码更改为:
<h:selectOneMenu
id="selectRecordDisplay"
value="#{customer.recordsDisplayed}"
<f:selectItems value="#{customer.rppValues}" />
<a4j:support event="onchange" actionListener="#{customer.onRecordsPerPageChange}" reRender="pangelgrid"></a4j:support>
</h:selectOneMenu>
【问题讨论】:
-
很抱歉漏掉了 - 是的。 myFaces 2.0.12 和 RichFaces 3.3.3。更新了我的问题