6

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;
}

「login.xhtml」のような固定のxhtmlではなく、ユーザーがログインしたxhtmlに戻る方法はありますか??

4

2 に答える 2

25

request URIにリダイレクトするだけです。

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

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.redirect(((HttpServletRequest) ec.getRequest()).getRequestURI());
}
于 2013-05-10T16:27:07.090 に答える
6

私が懸念している限り、この目的には2つの方法があります。

  1. 呼び出し元の commandButton の update 属性で、更新する必要があるコンポーネントを定義する必要があります。
  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 属性はコンポーネントを更新します。

2 番目の解決策

?faces-redirect=true実際のリフレッシュのためにアクションメソッドの戻り値に追加します

public String login(){

    currentUser = gu.login(usuario, password);

    return "login?faces-redirect=true";
}
于 2013-05-10T13:56:20.320 に答える