导航到另一个页面时的视图参数



我正在使用JSF2,并且我需要能够通过commandLink将参数从一个JSF页面传递到另一个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:param, f:viewParam。我甚至尝试过直接将其添加到url (?fromPage=funding)等,但它们似乎都只在值传递回当前页面时才起作用,而不是我导航到的新页面。

谁能告诉我怎样才能最好地完成这件事?

使用<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属性,之后您可以使用它返回到原始页面。

我还想说,这种方式是一个有点"黑客"的最终用户,我的意思是,你通过纯url传递原始路径。请参阅其他方法来实现这一点,如flash作用域,这是非常有用的,特别是如果你正在使用@ViewScoped bean。

我不知道你试图实现目标的方法的细节,因此我们不能告诉他们哪里出了问题,但是如果我们认为你的代码'原样',你没有任何将传递你想要的字符串。

不重复我们自己,这里有很多答案致力于使用这种或那种方法,所以我将给你最好的参考,在我看来,当然。

  1. 如何将参数传递给数据表中的命令链接
  2. ViewParam vs @ManagedProperty;
  3. <f:metadata><f:viewParam>可以用来做什么?

关于JSF中后退按钮的使用,您也可以看看我自己对如何在JSF中返回同一页面的回答。

顺便说一下,在页到页的导航中使用POST被认为是一种不好的做法。如果你需要的只是导航到另一个页面,你最好使用普通的<h:link><h:button>代替。

相关内容

  • 没有找到相关文章

最新更新