p: ajax getter для обновления, вызываемого перед слушателем - PullRequest
7 голосов
/ 15 марта 2012

Вот мой флажок. Я готовлю строку с разделителями-запятыми идентификаторов компонентов в слушателе. Проблема здесь в том, что метод getUpdateComponentList () вызывается до вызова слушателя. Таким образом, строка никогда не обновляется.

<p:outputPanel>
<h:selectManyCheckbox value="#{form.colors}">
  <f:selectItems value="#{form.colorItems}"/>
  <p:ajax listener="#{form.testListener}" event="change" update="#{form.updateComponentList}"  />
</h:selectManyCheckbox>
</p:outputPanel>

Ответы [ 2 ]

10 голосов
/ 15 марта 2012

Это ожидаемое поведение. PrimeFaces (и стандартный JSF) не переоценивает атрибуты updaterender, oncomplete и т. Д.) Для каждого запроса. Они оцениваются на основе просмотра. Например, RichFaces делает это в своем <a4j:ajax> и выдает точно ожидаемое поведение.

Для PrimeFaces лучше всего удалить атрибут update и использовать вместо него RequestContext#addPartialUpdateTarget() или #addPartialUpdateTargets() в методе действия.

1012 * Е.Г. *

RequestContext.getCurrentInstance().addPartialUpdateTargets(updateComponentList);

Требуется Collection<String>, например List<String> или Set<String>.

Кстати, это event="change" не нужно. Просто используйте событие компонента по умолчанию.


Обновление для пользователей более новой версии PrimeFaces, которые читают этот ответ позже и не могут найти вышеупомянутые методы, которые действительно удалены в более новой версии PrimeFaces; используйте вместо этого один из двух методов update() (один принимает String, а другой - Collection<String>).

RequestContext.getCurrentInstance().update(updateComponentList);
3 голосов
/ 28 февраля 2014

Я столкнулся с похожей проблемой, связанной с обновлением, выполняемым перед слушателем.Поместив два 'p: ajax' - один со слушателем, а другой - с обновлением - добился цели.

В вашем случае:

<p:outputPanel>
  <h:selectManyCheckbox value="#{form.colors}">
    <f:selectItems value="#{form.colorItems}"/>
    <p:ajax event="change" listener="#{form.testListener}" />
    <p:ajax event="change" update="#{form.updateComponentList}" />
  </h:selectManyCheckbox>
</p:outputPanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...