我正在使用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。
我不知道你试图实现目标的方法的细节,因此我们不能告诉他们哪里出了问题,但是如果我们认为你的代码'原样',你没有任何将传递你想要的字符串。
不重复我们自己,这里有很多答案致力于使用这种或那种方法,所以我将给你最好的参考,在我看来,当然。
- 如何将参数传递给数据表中的命令链接
- ViewParam vs @ManagedProperty;
<f:metadata>
和<f:viewParam>
可以用来做什么?关于JSF中后退按钮的使用,您也可以看看我自己对如何在JSF中返回同一页面的回答。
顺便说一下,在页到页的导航中使用POST被认为是一种不好的做法。如果你需要的只是导航到另一个页面,你最好使用普通的<h:link>
或<h:button>
代替。