希望有人可以帮我解决一个轻微的障碍,在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" />
我期望发生的是,当我点击'Set On'按钮时,'ON'outputText组件将取消隐藏,并且'OFF outputText组件将显示。但是,这不会发生。
有没有人知道为什么会这样,以及我如何在a4j组件操作完成后重新渲染这些组件?
答案 0 :(得分:11)
将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" />
答案 1 :(得分:3)
我同意Gene,但我能找到的最好方法是用
包围内容 <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>
答案 2 :(得分:1)
你让父母退回。它不一定是Seam标签。
答案 3 :(得分:0)
我认为在和 off 上的 h:outputText 元素不会在页面的加载时呈现。
即使呈现的的值更改为 true ,RichFaces也不会在以后重新呈现这些组件。