有条件地渲染按钮,设计,调用动作

时间:2011-08-24 06:40:22

标签: java jsf richfaces jsf-1.2

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,但那个设计对我来说有点不好......

1 个答案:

答案 0 :(得分:1)

RichFaces 3.3提供<a4j:keepAlive>标记,与Tomahawk的<t:saveState>和JSF2 @ViewScoped基本相同。在视图中的某处添加以下行:

<a4j:keepAlive beanName="#{bean}" />

只要您从action(侦听器)方法返回nullvoid,这将使bean保持活动状态。

另见: