Абсолютный повторный рендеринг с использованием RichFaces
Вопрос
Моя проблема в том , что RichFaces reRender
не работает "под" текущим элементом в дереве элементов;перезаписываются только верхние элементы.
Есть ли какой-нибудь способ получить доступ к нижним элементам с помощью AJAX?
Мы будем признательны за любую помощь!Дэниел
Редактировать Я изменил этот вопрос на более общий.Смотрите изменения, если вас интересует исходный вопрос.
Решение 2
Вот пример, где changePanel111()
изменяет содержимое нижнего элемента:
<h:form id="form" prependId="true">
<rich:panel id="PANEL1">
<h:outputText id="PANEL1TEXT" value="#{ajaxTestBean.panel1}"/>
<rich:panel id="PANEL11">
<h:outputText id="PANEL11TEXT" value="#{ajaxTestBean.panel11}"/>
<rich:panel id="PANEL111">
<h:outputText id="PANEL111TEXT" value="#{ajaxTestBean.panel111}"/>
</rich:panel>
</rich:panel>
<rich:panel id="PANEL12">
<h:outputText id="PANEL12TEXT" value="#{ajaxTestBean.panel12}"/>
<br/>
<a4j:commandLink value="CHANGE PANEL12" action="#{ajaxTestBean.changePanel12}">
<a4j:support reRender="PANEL12" event="onclick"/>
</a4j:commandLink>
<br/>
<a4j:commandLink value="CHANGE PANEL111" action="#{ajaxTestBean.changePanel111}">
<a4j:support reRender="form:PANEL111" event="onclick"/>
</a4j:commandLink>
</rich:panel>
</rich:panel>
</h:form>
Обратите внимание, что нижний элемент должен быть идентифицирован как form:PANEL111
.
Надеюсь это поможет!
Другие советы
reRender
работает с предоставлениемid
целевого объекта, который вы хотите перенаправить (внутри того же контейнера именования -form
чаще всего)- тот самый
id
должна быть уникальной строкой, согласно спецификации html reRender
допускает динамическое значение , т. е.reRender="#{myBean.currentItemsToRerender}
Исходя из этого, я думаю, вы должны быть в состоянии достичь того, чего вы хотите (хотя это не совсем ясно).
Обновить:
UIComponent.findComponent(..)
имеет четко определенный алгоритм разрешения идентификаторов.Таким образом, для абсолютной ссылки на ваш повторно отображаемый идентификатор должен начните с :
а затем продолжайте движение по иерархии контейнеров именования.
reRender также может указывать на любой компонент вне формы.Например, это работает:
<h:form>
<a4j:commandButton reRender="panel"/>
</h:form>
<h:panelGrid id="panel">
...
</h:panelGrid>
Для моего приложения MyFaces+Richfaces: <rich:panel>
тег не работал, как описано в выбранном ответе.Когда я изменил его на <a4j:outputPanel ajaxRendered="true" />
, все начало работать так, как указано здесь "<a4j:commandLink> Не выполняется повторный рендеринг"
Конфигурация:MyFaces 2.1.10 (Facelets, используемые для создания шаблонов) и Richfaces 4.2.3.
Надеюсь, это поможет.