JSF + Primefaces:Проблема с «отрисованными» компонентами с помощью ajax
-
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" />