我有两个JSF页面,假设A和B.From这两个网页A和BI可以导航到页面C.Now存在页面下的按钮(OK按钮),点击它应该导航回A或B取决于一旦从其中(A或B),第C是called.Any帮助将十分赞赏。
Answer 1:
解决方案,利用视图参数
这个想法是,你可以通过当前视图id作为下一个(目标)页面的GET参数。 从目标页面,你将能够用它来导航回。
基本例如:
视图A&B:
<h:body>
Hello from page A (B)
<h:link value="Go to page C via link" outcome="target">
<f:param name="backurl" value="#{view.viewId}"/>
</h:link>
<h:form>
<h:commandButton value="Go to page C via command button" action="#{baseBean.doAction}"/>
</h:form>
</h:body>
查看C:
<f:metadata>
<f:viewParam name="backurl" value="#{backBean.backurl}"/>
</f:metadata>
<h:body>
Hello from page C
<h:link value="Go back via link" outcome="#{backBean.backurl}">
</h:link>
<h:form>
<h:commandButton value="Go to page C via command button" action="#{backBean.back}"/>
</h:form>
</h:body>
版面A / B的豆:
@ManagedBean
@RequestScoped
public class BaseBean {
public String doAction() {
String url = FacesContext.getCurrentInstance().getViewRoot().getViewId();
return "/target?faces-redirect=true&backurl=" + url;
}
}
页的C豆:
@ManagedBean
@RequestScoped
public class BackBean {
private String backurl;
public String back() {
return backurl + "?faces-redirect=true";
}
public String getBackurl() {
return backurl;
}
public void setBackurl(String backurl) {
this.backurl = backurl;
}
}
最后一点要提的是,鉴于ID可以从URL在Web浏览器有所不同 。
当只有增强到该溶液中<h:link>
使用
考虑到合法的评论被BalusC和他以前的回答上这个问题取消按钮在验证错误的情况下不能正常工作 ,如果你不需要使用<h:commandButton>
在目标页面,因此并不需要做回到以前的页面时,任何一个企业工作,你基本上可以离开作业<h:link>
。 在这种情况下,不需要在所有的辅助bean(目标视图的)和目标视图的结构可以被最小化到:
<f:metadata>
<f:viewParam name="backurl"/>
</f:metadata>
<h:body>
Hello from page C
<h:link value="Go back" outcome="#{backurl}" rendered="#{not empty backurl}"/>
</h:body>
Answer 2:
你可以实现一个属性comesFrom
在Beanclass。 这个属性你可以给你的页面,在那里你会从浏览到另一个页面时传来的名称C
( A
如果是网页A, B
,如果是网页B)。
在你的页面点击您的OK按钮C
你可以检查你的财产comesFrom
,然后返回到该属性的值。
文章来源: How to get back to same JSF page on Pressing of some button from another JSF page