如何在JSF中从managedBean重新加载相同的页面?
我在JSF应用程序中实现了登录,但重定向有问题 我想在应用程序中的每个xhtml中提供登录表单,但在登录成功或失败后,我想让用户保持在单击登录时的相同页面 我曾尝试在managedBean方法中返回null,但这不起作用,因为它不会刷新网页,我需要刷新页面以使视图逻辑正常工作 这是登录表单:如何在JSF中从managedBean重新加载相同的页面?,jsf,redirect,login,Jsf,Redirect,Login,我在JSF应用程序中实现了登录,但重定向有问题 我想在应用程序中的每个xhtml中提供登录表单,但在登录成功或失败后,我想让用户保持在单击登录时的相同页面 我曾尝试在managedBean方法中返回null,但这不起作用,因为它不会刷新网页,我需要刷新页面以使视图逻辑正常工作 这是登录表单: <h:form id="loginForm" rendered="#{!loginBean.estaLogueado()}"> <p:panel h
<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>
有一种方法可以返回到用户登录的xhtml,而不是像“login.xhtml”这样的固定xhtml?就我而言,有两种方法可以实现此目的
?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>
就在最后
在操作字段中返回要重定向到的页面不是最佳做法吗?(在本例中,您可以将操作更改为actionListener)@Steven:1)OP无法硬编码结果值(此操作可以从多个页面调用),因此必须以编程方式解析当前页面。2) 操作侦听器不适用于业务逻辑。如何保留最初从页面调用的
getQueryString()
返回null
..@BalusC如何在从其后台bean重定向到页面时重新加载浏览器缓存?
<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>
public String login(){
currentUser = gu.login(usuario, password);
return "login?faces-redirect=true";
}
public void login() throws IOException {
// ...
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
}