Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何在按下另一个JSF页面上的某个按钮后返回到同一个JSF页面_Jsf 2_Navigation - Fatal编程技术网

Jsf 2 如何在按下另一个JSF页面上的某个按钮后返回到同一个JSF页面

Jsf 2 如何在按下另一个JSF页面上的某个按钮后返回到同一个JSF页面,jsf-2,navigation,Jsf 2,Navigation,我有两个JSF页面,假设是A和B。从这两个页面A和B,我可以导航到C页面。现在在C页面中有一个按钮(OK按钮),点击它应该导航回A或B,这取决于从哪里(A或B),调用了第C页。任何帮助都将不胜感激。您可以在Beanclass中实现一个属性comesFrom。当导航到页面C(A如果是页面A,B如果是页面B)时,您可以使用此属性提供您来自的页面的名称。 单击页面C中的“确定”按钮,您可以检查您的属性comesFrom并导航回该属性的值 利用视图参数的解决方案 其思想是,您可以将当前视图id作为下一个

我有两个JSF页面,假设是A和B。从这两个页面A和B,我可以导航到C页面。现在在C页面中有一个按钮(OK按钮),点击它应该导航回A或B,这取决于从哪里(A或B),调用了第C页。任何帮助都将不胜感激。

您可以在Beanclass中实现一个属性
comesFrom
。当导航到页面
C
A
如果是页面A,
B
如果是页面B)时,您可以使用此属性提供您来自的页面的名称。
单击页面
C
中的“确定”按钮,您可以检查您的属性
comesFrom
并导航回该属性的值

利用视图参数的解决方案 其思想是,您可以将当前视图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页的Bean:

@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可能不同于web浏览器中的URL

仅使用
时对解决方案的增强 考虑到BalusC的正确评论和他之前对该问题的回答,如果您不需要在目标页面中使用
,因此在返回上一页时不需要做任何业务工作,您基本上可以将工作留给
。在此场景中,根本不需要(目标视图的)支持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>

你好,C页

注意,在C中出现
时,整个bean是不必要的。只需去掉
属性,并使用
结果=“#{backurl}”
。当然也可以参见@BalusC,但在这种情况下,我们必须删除
的值绑定,否则它将为空。啊,编辑,编辑:)嗯,我告诉过你其他的吗?@BalusC,顺便问一下,你能检查一下吗,因为我不能让它完全工作?什么意思
rendered=“#{notempty backurl}”
@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;
    }

}
<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>