【问题标题】:Pass parameter to the backing bean of the new page while navigation导航时将参数传递给新页面的支持 bean
【发布时间】:2019-10-16 23:59:40
【问题描述】:

我使用 commandLink 导航到另一个页面:

<t:commandLink action="go_orderForm" immediate="true">
     <h:outputText value="#{order.number}" />
    <t:updateActionListener property="#{orderForm.orderId}"
                    value="#{order.id}" />
</t:commandLink>

这是有效的,并将 order.id 的值设置为支持 bean orderForm.orderId

在另一个地方,我使用 commandButton 在当前页面的后台 bean 中调用一个动作,然后导航到新页面:

<h:commandButton value="Create Batch" action="#{orderList.createBatchOrder}" />

backing bean 中的动作如下所示:

public String createBatchOrder() {
    // do something

    return "go_orderForm";
}

faces-config.xml 包含

<navigation-rule>
    <navigation-case>
        <from-outcome>go_orderForm</from-outcome>
        <to-view-id>/orderForm.jsp</to-view-id>
    </navigation-case>
</navigation-rule>

当我使用支持 bean 中的操作进行导航时,如何传递 orderForm.orderId 的参数?

【问题讨论】:

  • 您的意思是像闪存范围那样共享变量?
  • 答案取决于您使用的是 JSF 1.x 还是 2.x。 Tomahawk 组件库和 XML 导航规则的使用表明您实际上仍在使用侏罗纪 JSF 1.x。然而,下面 L.dev 的答案仅适用于 JSF 2.x。 JSF 2.x 是十多年前推出的。不能升级到 JSF 2.x 吗?尽管如此,正确的答案取决于您是否希望目标页面是幂等的。下面 L.dev 的答案假设它不是幂等的(即当您简单地刷新页面时,您可能会再次丢失此信息,不确定这是否是您想要的)。

标签: jsf myfaces


【解决方案1】:

在重定向之前把你的参数放到闪存中:

FacesContext.getCurrentInstance().getExternalContext().getFlash().put(key, value);

重定向后,您可以通过以下方式获得它:

FacesContext.getCurrentInstance().getExternalContext().getFlash().get(key);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多