Абсолютный повторный рендеринг с использованием RichFaces

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

  •  23-09-2019
  •  | 
  •  

Вопрос

Моя проблема в том , что 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.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top