JFS1.2 + Richfaces 3.3
情况如下:
JSP页面有条件地呈现一个或另一个面板组。
在每个panelGroup中有一对设置器和一个命令按钮。两个panelGroups中的每一个都使用自己的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>
问题是,如何设计页面以获得适当的呈现和操作?现在,我创建了额外的会话bean来保存切换值(x|y),但这种设计对我来说很糟糕……
RichFaces 3.3提供了与战斧的<t:saveState>
和JSF2 @ViewScoped
基本相同的<a4j:keepAlive>
标签。在视图中添加以下行:
<a4j:keepAlive beanName="#{bean}" />
只要您从操作(侦听器)方法返回null
或void
,这将使bean保持活动。
参见:
- JSF 1.2:如何在同一视图的回发中保持请求作用域的托管bean活动?