Java EE 7 JSF Facelet h:commandButton 操作重定向到页面 [重复]

Posted

技术标签:

【中文标题】Java EE 7 JSF Facelet h:commandButton 操作重定向到页面 [重复]【英文标题】:Java EE 7 JSF Facelet h:commandButton action redirect to page [duplicate] 【发布时间】:2015-02-14 12:45:32 【问题描述】:

您好,我在 Glassfish 4.01 上运行的 NetBeans 8.0.2 中有一个 Java EE 7 应用程序

我使用@ManagedBean @SessionScoped作为控制器UserController.java

我有一个index.xhtml Facelet 和一个signup.xhtml Facelet

index.xhtml Facelet 我有

<h:commandButton value="Sign Up" action="#userController.signUp()"></h:commandButton>

UserController.java中调用函数public String signUp()

在这个函数中,我返回 return Pages.SIGN_UP_PAGE; 渲染人脸 let signup.xhtml 我有一个表单来填写您的用户数据,例如用户名电子邮件和密码。

第一件事是当我return Pages.SIGN_UP_PAGE; 页面signup.xhtml 被渲染但在URL 中仍然存在.../faces/index.xhtml

signup.xhtml我有

<h:commandButton value="Create User" action="#userController.createNewUser()"></h:commandButton>

然后在public String createNewUser() 函数中,我返回return Pages.USER_ACTION_OVERVIEW;,它呈现页面overview.xhtml,但随后带有URL .../faces/signup.xhtml

这会导致更大的问题,即当我现在刷新页面(向我显示新已签名用户的数据的概览页面)时,我再次向具有相同 POST 参数的同一用户发送 POST 请求。

我需要的是,如果我呈现页面,则显示正确的 URL(呈现的页面的 on),并且如果我刷新该页面,则不再发送旧的 POST 请求。

【问题讨论】:

请查看***.com/questions/15521451/…。我认为它回答了你的问题。 【参考方案1】:

JSF 执行基于 POST 的请求,这就是您的 url 不会改变的原因。解决方案是像这样将faces-redirect 参数添加到您的查询字符串中

public String signUp () 
      //some processing here
      return Pages.SIGNUP_PAGE + "?faces-redirect=true";
 

这将在 POST 请求完成后强制 GET 重定向到注册页面。结果,您的浏览器的地址栏将显示当前页面的地址,即。 e.注册页面

【讨论】:

以上是关于Java EE 7 JSF Facelet h:commandButton 操作重定向到页面 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Java EE 7 JSF 示例不适用于 Tomcat

正确使用 Facelet 模板和复合组件

在 c:forEach 中渲染 h:panelGroup 时出现错误的 id

Java EE 6:JSF 与 Servlet + JSP。我应该费心学习 JSF 吗?

Java EE 6 - JSF 控制器

带有 ui:define 的 JSF2.0 部分渲染