我正在使用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:param
,f:viewParam
。我甚至尝试将它直接添加到url(?fromPage=funding
)等,但它们似乎只在值传递回当前页面时才起作用,而不是我导航到的新页面。
有人可以告诉我如何才能最好地完成这项工作。
答案 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>将传递你想要的字符串。
不要重复自己,这里有很多答案专门用于使用这种或那种方法,所以我认为当然,我会给你最好的参考。
<f:metadata>
and <f:viewParam>
be used for。关于JSF中后退按钮的使用,您还可以在How to get back to the same page in JSF上查看我自己的答案。
顺便说一下,使用POST进行页面到页面导航被认为是一种不好的做法。如果您只需导航到其他页面,则最好使用普通<h:link>
或<h:button>
。