簡體   English   中英

如何從 JSF 中的 managedBean 重新加載同一頁面?

[英]How can I reload the same page from a managedBean in JSF?

我在 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?

只需重定向請求 URI

public void login() throws IOException {
    // ...

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
}

就我而言,有兩種方法可以達到此目的。

  1. 您應該在調用者命令按鈕的更新屬性中定義需要更新的組件。
  2. 您應該通過添加?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";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM