gpt4 book ai didi

jsf-2 - 如何在按下另一个 JSF 页面的某个按钮时返回相同的 JSF 页面

转载 作者:行者123 更新时间:2023-12-05 00:31:15 28 4
gpt4 key购买 nike

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

最佳答案

利用 View 参数的解决方案

这个想法是您可以将当前 View ID 作为下一个(目标)页面的 get 参数传递。从目标页面,您将能够使用它来导航回来。

基本示例:

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

View 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 的 Bean:
@ManagedBean
@RequestScoped
public class BaseBean {

public String doAction() {
String url = FacesContext.getCurrentInstance().getViewRoot().getViewId();
return "/target?faces-redirect=true&backurl=" + url;
}

}

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

}

最后要提到的一点是, View ID 可能与 Web 浏览器中的 URL 不同。

仅当 <h:link> 时对解决方案的增强用来

考虑到 BalusC 的正确评论和他之前对问题的回答 Cancel button doesn't work in case of validation error ,以防您不需要雇用 <h:commandButton>在目标页面中,因此返回上一页时不需要做任何业务工作,您基本上可以将工作留给 <h:link> .在这种情况下,根本不需要(目标 View 的)支持 bean,目标 View 的结构可以最小化为:
<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>

关于jsf-2 - 如何在按下另一个 JSF 页面的某个按钮时返回相同的 JSF 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130190/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com