JFS1.2 + Richfaces 3.3
情况如下:
JSP页面有条件地呈现一个或另一个panelGroup。
在每个panelGroup中有几个setter和一个命令按钮。 两个panelGroup中的每一个都使用自己的bean来设置和执行操作。
在页面的顶部有selectOneRadio,有(明显的)两个项目 - 相应的条件渲染两个选项。
页面渲染正确,切换器导致渲染适当的面板。 例如,命令按钮不会调用操作。
我知道发生了什么 - 当我点击一个按钮来调用动作时,dom被重新生成,但是让我决定显示特定面板的值不再存在了。该按钮未重新创建,不会触发操作。
技术上:
<h:selectOneRadio value="#{reportType}">
<f:selectItem itemLabel="x" itemValue="x"/>
<f:selectItem itemLabel="y" itemValue="y"/>
<a4j:support event="onclick" reRender="xPanel, yPanel/>
</h:selectOneRadio>
<h:panelGrid id="xPanel "columns="2" rendered="#{reportType eq 'x'}">
<...some setters>
<... commandbutton>
</h:panelGrid>
<h:panelGrid id="yPanel "columns="2" rendered="#{reportType eq 'y'}">
<...some setters>
<... commandbutton>
</h:panelGrid>
问题是,如何设计页面以获得正确的渲染和动作? 现在,我创建了另外一个保存切换值(x | y)的会话bean,但那个设计对我来说有点不好......
答案 0 :(得分:1)
RichFaces 3.3提供<a4j:keepAlive>
标记,与Tomahawk的<t:saveState>
和JSF2 @ViewScoped
基本相同。在视图中的某处添加以下行:
<a4j:keepAlive beanName="#{bean}" />
只要您从action(侦听器)方法返回null
或void
,这将使bean保持活动状态。