Как перерисовать компонент RichFaces после вызова ссылки a4j - PullRequest
6 голосов
/ 10 июля 2009

Надеясь, что кто-то может помочь мне с небольшим препятствием, с которым я столкнулся в отношении повторного рендеринга компонентов RichFaces после того, как ссылка / кнопка a4j выполнила свое действие. Упрощенная версия моей проблемы выглядит следующим образом:

У меня есть 2 компонента вывода, отображающие текстовое значение, которое отображается на основе некоторого значения в моем классе менеджера:

<h:outputText id="on" value="ON" rendered="#{manager.isOn}" />

<h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" />

У меня также есть 2 ссылки a4j, которые вызывают какое-то действие, а затем повторно отображают указанные выше компоненты outputText:

<a4j:commandLink ajaxSingle="true" value="Set On" action="#{manager.setOn(true)}" reRender="on,off" />

<a4j:commandLink ajaxSingle="true" value="Set Off" action="#{manager.setOn(false)}" reRender="on,off" />

Я ожидал бы, что когда я нажму кнопку «Установить вкл», будет выведен компонент «ВКЛ» outputText, и будет показан компонент «ВЫКЛ. Однако этого не происходит.

У кого-нибудь есть ответ, почему это так, и как мне повторить рендеринг этих компонентов после завершения действия компонента a4j?

Ответы [ 4 ]

11 голосов
/ 10 июля 2009

Оберните outputText компоненты в s:div и выполните повторную визуализацию следующим образом:

<s:div id="myDiv">
    <h:outputText id="on" value="ON" rendered="#{manager.isOn}" />

    <h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" />
</s:div>

<a4j:commandLink ajaxSingle="true" value="Set On"
   action="#{manager.setOn(true)}" reRender="myDiv" />

<a4j:commandLink ajaxSingle="true" value="Set Off"
   action="#{manager.setOn(false)}" reRender="myDiv" />
3 голосов
/ 02 октября 2009

Я согласен с Джином, но лучший способ, который я могу найти, это окружить контент

<a4j:outputpanel id="whatever_id" />

например,

<a4j:outputpanel id="myDiv">
    <h:outputText id="on" value="ON" rendered="#{manager.isOn}" />
    <h:outputText id="off" value="OFF" rendered="#{not manager.isOn}" />
</a4j:outputpanel>
1 голос
/ 21 сентября 2009

Вы возвращаете родителя. Это не обязательно должен быть тег Seam.

0 голосов
/ 23 июля 2009

Полагаю, что ваши h: outputText элементы on и off не отображаются во время загрузки страницы.

RichFaces не будет повторно выполнять эти компоненты позже, даже если значение рендеринга изменилось на true .

...