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

时间:2014-12-16 08:49:27

标签: jsf java-ee facelets

您好我在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>

调用public String signUp() {

中的函数UserController.java

在这个函数中,我返回return Pages.SIGN_UP_PAGE;,这使得Face signup.xhtml在那里让我有一个表格来填写你的用户数据,例如用户名电子邮件和密码。

第一件事是当我return Pages.SIGN_UP_PAGE;时,网页signup.xhtml会被呈现,但网址仍然是.../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,但随后会显示网址 .../faces/signup.xhtml

这导致了一个更大的问题,当我现在刷新页面(概述页面向我显示新的signedUp用户的数据)时,我再次向具有相同POST参数的同一用户signUp()发送POST请求。

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

1 个答案:

答案 0 :(得分:0)

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

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

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