2

JFS1.2 + Richfaces 3.3

情况如下:

JSP 页面有条件地呈现一个或另一个 panelGroup。

在每个 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),但是这种设计对我来说很糟糕......

4

1 回答 1

1

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

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

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

也可以看看:

于 2011-09-03T15:38:26.953 回答