Как обернуть лицевую сторону в элемент <p: ajax>

У меня есть <p:dataTable> в лицевой стороне. Фейслет включен в страницу. Выбор строки таблицы должен инициировать обновление элемента окружающей страницы.

Когда я включаю <p:ajax event="rowSelect" update=":open:separate" /> внутри стола все отлично работает. Но я использую таблицу на нескольких страницах и не могу гарантировать постоянный идентификатор для обновленного элемента.

Я пытался удалить <p:ajax> со стола и заверните включенную в него таблицу следующим образом:

<p:ajax event="rowSelect" update=":open:separate">
    <ui:include src="/open/components/submittersTable.xhtml"/>
</p:ajax>

Я получаю эту ошибку (основная причина сокращена):

javax.servlet.ServletException: /open/index.xhtml @30,59 <p:ajax> Event:rowSelect is not supported.
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
    org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)

root cause

javax.faces.view.facelets.TagException: /open/index.xhtml @30,59 <p:ajax> Event:rowSelect is not supported.
    org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.applyAttachedObject(AjaxBehaviorHandler.java:148)
    org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.apply(AjaxBehaviorHandler.java:126)

У меня неправильные представления о том, что возможно с <p:ajax>? Нужно ли включать его в таблицу и пытаться заставить идентификаторы на соседних страницах соответствовать? Или можно обернуть include с ajax и я просто делаю это неправильно?

Спасибо

2 ответа

Решение

Нет, вы не можете из-за события = "rowSelect". Некоторое объяснение event="rowSelect" означает, что "строка в таблице данных выбрана". Таким образом, вы не можете использовать это вне p:dataTable.

Я нашел другой подход для этого - установка параметров пользовательского интерфейса для лицевой стороны определенно лучше, чем принудительное использование идентификаторов для всех представлений, использующих лицевую сторону.

Можно смело покинуть <p:ajax> тег внутри таблицы Facelet, просто определите параметр на сайте включения:

<ui:include src="/open/components/submittersTable.xhtml">
    <ui:param name="updateParam" value=":open:content" />
</ui:include>

и изменить updated атрибут для использования этого параметра:

<p:ajax event="rowSelect" update="#{updateParam}" />
Другие вопросы по тегам