导航到其他页面时查看参数

时间:2013-03-15 14:51:33

标签: jsf parameters

我正在使用JSF2,我需要能够通过commandLink将参数从一个JSF页面传递到另一个页面。

我在页面funding.xhtml(ViewScoped)上并定义了以下链接:

<p:commandLink styleClass="toolbar" 
               action="/application/customerApplicationManagement.jsf">
    <p:graphicImage url="/resources/gfx/search.png" />
    <h:outputText value="#{msg.menu_searchApplications}" styleClass="toolbarLink" />
</p:commandLink>

我需要将一个字符串值传递给customerApplicationManagement页面,指明我来自哪个页面,以便在选择应用程序后,我可以返回该页面。我已尝试了一些有关如何传递此值的建议,包括f:paramf:viewParam。我甚至尝试将它直接添加到url(?fromPage=funding)等,但它们似乎只在值传递回当前页面时才起作用,而不是我导航到的新页面。

有人可以告诉我如何才能最好地完成这项工作。

2 个答案:

答案 0 :(得分:2)

使用<f:param><f:viewParam>

来源页面:

<p:commandLink styleClass="toolbar" 
           action="/application/customerApplicationManagement.jsf">
    <p:graphicImage url="/resources/gfx/search.png" />
    <h:outputText value="#{msg.menu_searchApplications}" styleClass="toolbarLink" />
    <f:param name="fromPage" value="funding.xhtml" />
</p:commandLink>

目标网页(已绑定):

<f:metadata>
    <f:viewParam name="fromPage" value="#{destinationBacking.fromPage}" />
</f:metadata />

<h:link value="Go back!" outcome="#{destinationBacking.fromPage}" />

目标网页(未绑定):

<f:metadata>
    <f:viewParam name="fromPage" />
</f:metadata />

<h:link value="Go back!" outcome="fromPage" />

支持bean(仅当你想绑定参数时):

@ManagedBean
@ViewScoped
public class DestinationBacking{
    String fromPage;

    public String getFromPage(){
        return fromPage;
    }

    public void setFromPage(String frompage){
        fromPage = frompage;
    }
}

您的视图路径将从目标辅助bean绑定到fromPage属性,然后您可以使用它返回到原始页面。

另外我想说最终用户这种方式有点“难以理解”,我的意思是,你通过纯网址传递原始路径。另请参阅其他实现方法,如flash scope,如果您正在使用@ViewScoped bean,这非常有用。

答案 1 :(得分:0)

我不知道您尝试实现目标的方法的具体细节,因此我们无法判断它们有什么问题,但如果我们认为您的代码“按原样”,则您没有任何东西< / em>将传递你想要的字符串。

不要重复自己,这里有很多答案专门用于使用这种或那种方法,所以我认为当然,我会给你最好的参考。

  1. How can I pass a parameter to a commandlink inside a datatable;
  2. ViewParam vs @ManagedProperty;
  3. What can <f:metadata> and <f:viewParam> be used for
  4. 关于JSF中后退按钮的使用,您还可以在How to get back to the same page in JSF上查看我自己的答案。

    顺便说一下,使用POST进行页面到页面导航被认为是一种不好的做法。如果您只需导航到其他页面,则最好使用普通<h:link><h:button>