我在JSF应用程序中实现登录并且重定向有问题。
我想在应用程序的每个xhtml中提供登录表单,但在登录成功或失败后,我希望将用户保持在登录时单击的页面。
我试图在managedBean方法中返回null,但这不起作用,因为它不刷新webPage,我需要刷新页面以使视图逻辑起作用。
这是登录表单:
<h:form id="loginForm" rendered="#{!loginBean.estaLogueado()}">
<p:panel header="#{msg.header_login}">
<h:outputLabel for="login" value="#{msg.login}"/>
<p:inputText id="login" value="#{loginBean.usuario}"></p:inputText><br/>
<h:outputLabel for="pwd" value="#{msg.password}"/>
<p:inputText id="pwd" type="password" value="#{loginBean.password}"></p:inputText><br/>
<p:commandButton action="#{loginBean.login()}" value="Login"/>
</p:panel>
</h:form>
<h:form id="logoutForm" rendered="#{loginBean.estaLogueado()}">
Bienvenido #{loginBean.nombreUsuario}!!<br/>
<p:commandButton action="#{loginBean.logout()}" value="Desconectar"/>
</h:form>
这是action属性中的方法:
public String login(){
currentUser = gu.login(usuario, password);
return null;
}
有一种方法可以返回用户所在的xhtml,而不是像“login.xhtml”这样的固定xhtml ??
答案 0 :(得分:24)
public void login() throws IOException {
// ...
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
}
答案 1 :(得分:6)
就我而言,有两种方法可以达到此目的。
?faces-redirect=true
来返回操作值来进行真正的刷新。第一个解决方案。
<h:form id="loginForm" rendered="#{!loginBean.estaLogueado()}">
<p:panel header="#{msg.header_login}">
<h:outputLabel for="login" value="#{msg.login}"/>
<p:inputText id="login" value="#{loginBean.usuario}"></p:inputText><br/>
<h:outputLabel for="pwd" value="#{msg.password}"/>
<p:inputText id="pwd" type="password" value="#{loginBean.password}"></p:inputText><br/>
<p:commandButton action="#{loginBean.login()}" value="Login" update=":loginForm :logoutForm"/>
</p:panel>
</h:form>
<h:form id="logoutForm" rendered="#{loginBean.estaLogueado()}">
Bienvenido #{loginBean.nombreUsuario}!!<br/>
<p:commandButton action="#{loginBean.logout()}" update=":loginForm :logoutForm" value="Desconectar"/>
</h:form>
update属性将更新组件。
第二个解决方案
将?faces-redirect=true
添加到操作方法的返回值以进行实际刷新
public String login(){
currentUser = gu.login(usuario, password);
return "login?faces-redirect=true";
}