Как вызвать несколько методов с помощью JSF - PullRequest
1 голос
/ 22 июня 2011

Добрый день,

У меня есть страница поиска, которая использует ajax для отображения нескольких таблиц данных без обновления страницы. Для меня обязательно вызывать метод в качестве прослушивателя для каждой таблицы. Ниже приведен фрагмент первой таблицы данных, которая отлично работает.

Чтобы отобразить второй объект данных, мне нужно вызвать метод #{evalController.prepareList} в качестве прослушивателя для ajax. Проблема в том, что <f:ajax атрибут «Listener» не займет более одного метода .

Таким образом, остальным способом является вызов <f:ajax несколько раз, и каждый раз с другим слушателем, который не работает. Есть ли способ добиться этого? Если нет, я должен создать метод в управляемом Бине, который вызывает все методы, которые мне нужны, и использовать его как один слушатель? Заранее спасибо за помощь.

<h:form id="searchform">

                <h:panelGrid columns="3" >
                    <p:inputText value="#{ddnController.patientID}" id="pidinput"   maxlength="7" size="7">
                        <f:ajax execute="@this" event="keyup" render="searchbutton ddntable" listener="#{ddnController.prepareList}"/>

                    </p:inputText>

                    <h:commandButton  image="#{resource['images/search.png']}" id="searchbutton" value="#{bundle.Search}" 
                                      action="submit" actionListener="#{ddnController.prepareList}" 
                                      disabled="#{empty ddnController.patientID or ddnController.patientID.equals('0')}"/>
                    <p:panel><h:outputText value="Saisir 0 pour avoir tous les Patients" style="font-style: italic;"/></p:panel>
                </h:panelGrid>

                <p:dataTable id="ddntable" value="#{ddnController.items}" var="ddn" rendered="#{!empty ddnController.items}" paginator="true" >....

1 Ответ

0 голосов
/ 24 июня 2011

Я все еще не уверен, почему составной метод не имеет эффекта при вызове. Вероятно, он не вызывается во время до или после правильной фазы (я буду профилировать это позже). Так или иначе, я нашел решение с двумя ребрами (это решение моей проблемы , но заставляет меня пожертвовать использованием ajax ):

Итак, вместо вызова - из каждого управляемого компонента - метод (prepareList ()), который я использую в качестве слушателя:

   private DataModel items = null; // Getter to retrieve items
    // ......
    public String prepareList() {
    recreatemodel();
    return "List";
    } 
private void recreatemodel(){
items=null;
}

(кстати, этот метод устанавливает для модели данных значение NULL, чтобы обновить ее, и именно так обновляются мои данные). Внутри командной кнопки я вложил свойство слушателя действия:

<h:commandButton image="#{resource['images/search.png']}" id="searchbutton" value="#{bundle.Search}" 
                                      action="submit" 
                                      disabled="#{empty ddnController.patientID or ddnController.patientID.equals('0')}">

<f:PropertyActionListener target="#{ddnController.items}" value="#{null}" />
<f:PropertyActionListener target="#{evalController.items}" value="#{null}" />
<f:PropertyActionListener target="#{corController.items}" value="#{null}" />
<!--...etc -->

</h:commandButton>

Я бы хотел, чтобы <f:PropertyActionListener /> мог быть вложен внутрь <h:ajax/>.

Если у кого-то есть решение, позволяющее использовать слушатель действия свойства и ajax , чтобы избежать отправки формы с помощью кнопки, он / она приветствуется. Тогда я сделаю его / ее ответ принятым.

...