Я использую MyFaces 2.0.12 и RichFaces 3.3.3. Мне нужно вызывать две разные функции в BackBean (Session scope
), когда пользователи изменяют выбор h:selectOneMenu
. Ранее я делал это, как показано ниже:
<h:selectOneMenu
value="#{customer.recordsDisplayed}"
valueChangeListener="#{customer.onRecordsPerPageChange}"
onchange="submit()"
<f:selectItems value="#{customer.rppValues}" />
</h:selectOneMenu>
и в бобах в:
public void onRecordsPerPageChange(ValueChangeEvent vce){
if(this.searchFlagAdvance)
searchMethodA();
else
searchMethodB();
}
Я понимаю, что вышеприведенное неверно, поскольку вы не должны вызывать логику или изменять значения бобов во время фазы ValueChangeEvent .
поэтому мой вопрос в том, что является правильным методом? из-за приведенного выше кода я попадаю в сценарии, где значения бобов равны нулю, и все не получается.
UPDATE:
Я изменил свой код ниже и работает отлично. Я просто хочу знать, если ниже это хорошая практика.
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>