【问题标题】:Conditionally rendered button, design, calling an action条件渲染按钮,设计,调用动作
【发布时间】:2011-11-02 12:57:15
【问题描述】:

JFS1.2 + Richfaces 3.3

情况如下:

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

在每个 panelGroup 中都有几个 setter 和一个命令按钮。 两个 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),但是这种设计对我来说很糟糕......

【问题讨论】:

  • 我认为这是JSF 1.2 中范围不足的经典示例。所有大于request 的东西都必须是session...JSF 2.0 更好:)
  • 顺便说一句,我认为您的解决方案已经足够好了。
  • 好吧,我很乐意使用 tomahawk.. 不幸的是,它在我的项目中被标记为已弃用...缺少范围...确实,视图很适合,可悲的是,该选项(升级到 JSF2)也不能考虑(项目要求)。什么会让我高兴 - 是否有可能在没有额外会话 bean 持有决策值的情况下解决问题?
  • 这里有一些JSF 大师,例如BalusC。他可以肯定地告诉你。

标签: java jsf richfaces jsf-1.2


【解决方案1】:

RichFaces 3.3 提供了 &lt;a4j:keepAlive&gt; 标签,它与 Tomahawk 的 &lt;t:saveState&gt; 和 JSF2 @ViewScoped 基本相同。在视图中的某处添加以下行:

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

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

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-25
    • 2020-10-30
    • 2020-12-20
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2012-12-10
    相关资源
    最近更新 更多