您好我在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请求。
答案 0 :(得分:0)
JSF执行基于POST的请求,这就是您的网址不会更改的原因。解决方案是将faces-redirect
参数添加到您的查询字符串中,如此
public String signUp () {
//some processing here
return Pages.SIGNUP_PAGE + "?faces-redirect=true";
}
这将在POST请求完成后强制将GET重定向到注册页面。因此,您的浏览器的地址栏将显示当前页面的地址,即。即注册页面