【问题标题】:How to navigate with request parameters?如何使用请求参数导航?
【发布时间】:2012-04-04 12:11:50
【问题描述】:

我想从一个页面导航到另一个页面,比如从page1bean1page2bean2。我需要将一些参数从bean1 传递给bean2

我想了解如何在page2<f:metadata> 部分中使用@ManagedProperty 作为参数和<f:viewParam>。比如说,我有 field1field2field3 可用在 bean1bean2 与 getter 和 setter。我的理解是,我必须在 page2 的元数据中定义视图参数:

喜欢

<f:metadata>
    <f:viewParam name="field1" value="#{bean2.field1}"/>
    <f:viewParam name="field2" value="#{bean2.field2}"/>
    <f:viewParam name="field3" value="#{bean2.field3}"/>
</f:metadata> 

我不确定在bean1bean2 中使用@ManagedProperty 的注释来定义参数field1field2field3 的位置。

page1 我可以使用"page2?faces-redirect=true&amp;amp;includeViewParams=true"

我可以在我的一种方法中使用相同的方法,而不是在page1 中使用,比如在响应commandlink 的提交时?

如果我需要在page1page2 中都有这三个字段,我可以定义那些隐藏字段吗?

【问题讨论】:

    标签: jsf-2 viewparams


    【解决方案1】:

    您需要在page1.xhtml&lt;h:link&gt; 中将它们指定为&lt;f:param&gt;

    <h:link value="Go to page2" outcome="page2">
        <f:param name="field1" value="#{bean1.field1}" />
        <f:param name="field2" value="#{bean1.field2}" />
        <f:param name="field3" value="#{bean1.field3}" />
    </h:link>
    

    然后您可以使用&lt;f:viewParam&gt;(或@ManagedProperty,但这允许较少细粒度的验证)将它们设置在page2.xhtml 的bean 中。

    <f:metadata>
        <f:viewParam name="field1" value="#{bean2.field1}" />
        <f:viewParam name="field2" value="#{bean2.field2}" />
        <f:viewParam name="field3" value="#{bean2.field3}" />
    </f:metadata>
    

    您无需在此处通过&lt;h:commandLink&gt; 使用faces-redirectincludeViewParam 发送POST 请求。只需 &lt;h:link&gt; 的一个简单 GET 请求就更简单,对 SEO 也更友好。

    另见:

    【讨论】:

    • 非常感谢 BalusC。我真的很感激。我看过你的很多文章,我只想说我喜欢这些。你解释得真好。
    • 抱歉,只是按了 Enter 键。我希望你碰巧看到我的帖子,我的愿望得到了实现。谢谢你。这是我想要做的。我有一个单选模式和 ajax 事件 rowselect 的数据表,我想导航到另一个页面以显示所选行的详细信息(另一个表)。所以在我下面的 onRowSelect 方法中,我正在导航到另一个页面。
    • 'public String onRowSelect(SelectEvent event) { ConfigurableNavigationHandler 可配置NavigationHandler = (ConfigurableNavigationHandler)FacesContext。 getCurrentInstance().getApplication().getNavigationHandler();可配置的NavigationHandler.performNavigation("DetailBean?faces-redirect=true");返回 ””;'在这里我想添加 '&includeViewParams=true' 我正在使用 primefaces '
    • 不客气。对不起,这是题外话。问一个新的和明确的问题:)
    • 当然,我可以做到,但我仍在尝试理解或说学习如何在方法中使用 url 导航到另一个页面时传递参数。如果您愿意,我可以发布另一个问题,但请确认。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2015-08-13
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多