0

プロジェクトにログイン システムを実装しようとしていますが、まだ成功していません。プロジェクトでTomcat 7、Java 6、およびJSF 2.0を使用していますが、常にユーザーを別のページにリダイレクトしようとすると、別のエラーが発生します。

の関連部分は次のlogin.xhtmlとおりです。

<h:form id="form-login">
    <fieldset>
    <div class="form-group">
        <label for="login">Login:</label>
        <p:inputText styleClass="form-control" autocomplete="off" id="login" 
        placeholder="Nome de usuário" style="padding: 6px 12px;" required="true" 
        requiredMessage="Este campo é obrigatório." value="#{loginMBean.login}"/>
    </div>

    <div class="form-group">
        <label for="senha">Senha: </label>
        <p:inputText styleClass="form-control" autocomplete="off" id="senha"                                
                type="password" placeholder="Senha" style="padding: 6px 12px;" 
                required="true" requiredMessage="Este campo é obrigatório." 
                value="#{loginMBean.password}" />
    </div>

    <div class="form-actions">
        <h:commandButton value="Entrar" styleClass="btn btn-default btn-lg" 
                action="#{loginMBean.entrar}" />
    </div>
    </fieldset>
</h:form>

私のloginMBean

(String login, string password, this part is okay, already works)
...

public void entrar() throws IOException{

    Login loginTentativa = new Login(login, password);

    int resultadoValidacao = controle.validaLogin(loginTentativa);

    switch (resultadoValidacao) {
        case 0:
               FacesContext.getCurrentInstance().getExternalContext().dispatch("first/1-dados-escola.xhtml");
        case 1:                         
               FacesContext.getCurrentInstance().getExternalContext().redirect("/user/principal.xhtml");

        default:
            System.out.println("Usuário não autenticado.");
    }
}

ケース 0: ユーザーが認証されました。Web サイトにアクセスするのはこれが初めてではありません。
ケース 1: ユーザーが認証されました。彼が Web サイトにアクセスするのはこれが初めてです。
ケース 2: 認証されていません。

私のテストでは、ケース 1 があります。しかし、「リダイレクト」を使用すると、次のエラー メッセージが表示されました。

javax.faces.el.EvaluationException: java.lang.IllegalStateException
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:791)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1256)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 

そして、「ディスパッチ」を使用しようとすると、次のようになりました。

 javax.faces.el.EvaluationException: java.lang.IllegalStateException: Cannot forward after response has been committed
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:791)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1256)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

私が間違っていることは何ですか?:/

4

1 に答える 1

3

switch 内で break ステートメントを使用していないと思うので、ケース 0 の後にケース 1 が実行され、「応答がコミットされた後に転送できません」というエラーが表示される場合は、この関数から URL を返してみてください。

 public String entrar() throws IOException{

Login loginTentativa = new Login(login, password);
 String result="";

int resultadoValidacao = controle.validaLogin(loginTentativa);

switch (resultadoValidacao) {
    case 0:
           result="first/1-dados-escola.xhtml";
    break;
    case 1:                         
           result="/user/principal.xhtml";
    break;

    default:
        System.out.println("Usuário não autenticado.");
}

return result;
 }
于 2013-11-09T12:19:14.470 に答える