Вызов двух разных функций на основе значения h: selectOneMenu - PullRequest
0 голосов
/ 09 марта 2012

Я использую 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>

1 Ответ

2 голосов
/ 09 марта 2012

Поскольку вы используете JSF 2.0, вы можете использовать ajax:

<h:selectOneMenu value="#{customer.recordsDisplayed}">
  <f:selectItems value="#{customer.rppValues}" />
  <f:ajax action="#{customer.onRecordsPerPageChange}" 
          execute="idsToBeProcessed"
          render="idsToBeRendered"/>
</h:selectOneMenu>

С методом действия follogin:

public void onRecordsPerPageChange(AjaxBehaviorEvent event) {
 ...
}

В списке атрибутов execute идентификаторы (пробел)разделены) всех компонентов, которые должны быть обработаны на стороне сервера, особенно тех, от которых зависит ваш метод слушателя.Атрибут render принимает все идентификаторы компонентов, которые должны быть повторно обработаны при возврате вызова ajax.Если вы введете @form в один или оба атрибута, вся форма будет обработана / обработана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...