JSF + Primefaces: проблема с "визуализированными" компонентами с помощью ajax - PullRequest
4 голосов
/ 21 сентября 2010

EDIT
Не могу заставить rendered правильно работать с update атрибутами. Вот мои коды

        <ui:define name="left">
            <h:form>
                <p:commandLink value="Hey"
                actionListener="#{bean.setRenderComment}"
                update="comment"/>
            </h:form>
       </ui:define>
       <ui:define name="right">
            <h:panelGroup id="comment" rendered="#{bean.renderComment}">
                hello
            </h:panelGroup>
       </ui:define>

renderComment - это логические атрибуты внутри bean. setRenderComment в основном переключает состояние renderComment как это

this.renderComment = !this.renderComment;

Правильно, каждый раз, когда я нажимаю на ссылку Hey, мне нужно обновить, чтобы включить или выключить hello Как я могу это исправить, чтобы мне не нужно было обновлять

Ответы [ 2 ]

13 голосов
/ 21 сентября 2010

Я не использую Primefaces, но Richfaces в моих проектах. Так что я не совсем осведомлен о том, как процесс обновления выполняется Primefaces. Однако у меня есть идея, которую легко проверить.

Ваша проблема может быть связана с тем, что компонент для повторного рендеринга (т.е. update ) не найден на странице HTML. Если ваш атрибут rendered равен false, то <SPAN> с идентификатором comment будет , а не , встроенным в созданную HTML-страницу. Таким образом, когда запрос Ajax получен на стороне клиента, механизм Ajax не может обновить этот <SPAN>, поскольку он не найден.

Итак, вы можете всегда визуализировать panelGroup и переместить атрибут rendered во вложенный <h:outputText>, содержащий сообщение Hello .

Вот что я предлагаю:

<h:panelGroup id="comment">
    <h:outputText value="Hello" rendered="#{bean.renderComment}"/>
</h:panelGroup>

Таким образом, группа Panel всегда будет обновляться после вызова Ajax и будет содержать сообщение Hello или нет, относительно значения атрибута renderComment вашего компонента.

1 голос
/ 21 сентября 2010

Поскольку компонент с идентификатором comment не является одним из дочерних элементов формы (компонент UINamingContainer), необходимо указать префикс ID с :, чтобы дать JSF команду сканировать с «верхнего уровня».

Это должно сделать:

<p:commandLink value="Hey"
    actionListener="#{bean.setRenderComment}"
    update=":comment" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...