2012-05-24 2 views
1

Я динамически добавляю h:selectOneMenu на страницу. Но метод для f:ajax не вызывается для selectItems, но он работает, если h:selectOneMenu был добавлен на страницу с самого начала (динамически не добавлен с использованием атрибута update). Мой код выглядит следующим образом:f: прослушиватель ajax терпит неудачу в динамически добавленном h: selectOneMenu

(Исправленная после @ предложение Даниэля)

<h:commandButton value="Watch"> 
      <f:ajax render="deptsSelBox"/> 
      <f:setPropertyActionListener value="#{true}" target="#{listRetriever.allow}" /> 
    </h:commandButton> 

    <h:panelGroup id="deptsSelBox"> 
     <h:selectOneMenu id="deptsSel" rendered="#{listRetriever.allow}" value="#{listRetriever.reqId}"> 
      <f:selectItems value="#{listRetriever.list}" /> 
      <f:ajax listener="#{listRetriever.retrieve()}" execute="deptsSel" /> 
     </h:selectOneMenu> 
    </h:panelGroup> 

ответ

1

h:commandButton не получил update атрибут, выглядит как смесь из primefaces и чистого JSF (update атрибут из p:commandButton)

Добавить f:ajax на ваш commandButton и использовать render атрибут

<h:commandButton value="Watch"> 
     <f:ajax render="deptsSelBox"/> 
     <f:setPropertyActionListener value="#{true}" target="#{listRetriever.allow}" /> 
</h:commandButton> 

также исправить выбор Аякса этой

<f:ajax listener="#{listRetriever.retrieve}" update="deptsSel"/> 

и попытаться рамки изменения от request до view

другой подход будет установить значение allow внутри метода, как это (вы также можете отправьте его как параметр тоже)

<h:commandButton value="Watch" action="listRetriever.updateAllow"> 
     <f:ajax render="deptsSelBox"/> 
</h:commandButton> 


public void updateAllow(){ 
    allow = true; 
} 
+0

Да были правильными Я использовал простые шрифты, однако даже после исправления f: ajax (2nd one) все еще не выполняется для динамически добавлен 'h: selectOneMenu'. Обратите внимание, что 'h: selectOneMenu' успешно добавлен на страницу, однако f: ajax еще не работает для selectItems. –

+0

обновил мой ответ, также опубликовать ваш код получения – Daniel

+0

Что касается вашего предложения по выбору 'f: ajax', я не могу обновить' deptsSelBox' снова, поскольку компонент больше не доступен, он был просто запрошен в области и был удален после того, как был выбран selectOneMenu. Кстати, почему мне нужно обновить 'deptSelBox' снова?? –

Смежные вопросы