6

希望有人可以帮助我解决在 a4j 链接/按钮执行操作后重新渲染 RichFaces 组件时遇到的一个小障碍。我的问题的简化版本如下:

我有 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" />

我期望发生的是,当我单击“设置打开”按钮时,“打开”输出文本组件将取消隐藏,而“关闭输出文本”组件将显示。但是,这不会发生。

有没有人知道为什么会这样,以及在 a4j 组件操作完成后我如何重新渲染这些组件?

4

4 回答 4

11

将组件包装outputText在 an 中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" />
于 2009-07-10T06:56:26.060 回答
3

I agree with Gene but the best way I could find is to surround the content with

<a4j:outputpanel id="whatever_id" />

for example,

<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>
于 2009-10-02T16:40:49.977 回答
1

您重新渲染父级。它不一定是 Seam 标签。

于 2009-09-21T10:37:25.533 回答
0

我想您的h:outputText元素打开关闭不会在页面加载时呈现。

RichFaces 以后不会重新渲染这些组件,即使 render 的值更改为true

于 2009-07-23T09:34:48.163 回答