JSF + Primefaces:Проблема с «отрисованными» компонентами с помощью ajax

StackOverflow https://stackoverflow.com/questions/3756256

  •  04-10-2019
  •  | 
  •  

Вопрос

РЕДАКТИРОВАТЬ
Кажется, не могу получить 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 вкл или выкл.Как я могу это исправить, чтобы мне не нужно было обновлять

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

Так как компонент с идентификатором comment не один из форм ( UINamingContainer Компонент) Дети, вам нужно префикс идентификатора с : проинструктировать JSF сканировать с «верхнего уровня».

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

<p:commandLink value="Hey"
    actionListener="#{bean.setRenderComment}"
    update=":comment" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top