4

動作させることができません。私は次のようになります:

Unable to find matching navigation case with from-view-id '/login.xhtml' for action '#{admin.Validity}' with outcome 'failure'

これは私が使用しているコードです:

HTML:

<div id="main" >

        <h:form id="login_form">
            <table>
                <tr>
                    <td><h:outputText value="User: " /></td>
                    <td><h:inputText id="username"
                            value="#{admin.username}" /></td>
                </tr>
                <tr>
                    <td><h:outputText value="Password: " /></td>
                    <td><h:inputSecret id="password"
                            value="#{admin.password}" /></td>
                </tr>
                <tr>
                    <td></td>
                    <td><h:commandButton value="Login" type="submit"
                            action="#{admin.Validity}" /></td>
                </tr>
            </table>
        </h:form>

    </div>

Admin.java

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


@ManagedBean(name="admin")
@SessionScoped
public class Admin implements Serializable {
/**
 * 
 */
private static final long serialVersionUID = 1L;
Boolean authenticated;
String username;
String password;

public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

public String Validity() {
    if(username.equals("admin") && password.equals("admin")) {
        authenticated=true;
        return "success";
    }   else   {
        authenticated=false;
        return "failure";
    }
}

}

faces-config.xml

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

<navigation-rule>
    <from-view-id>/login.xhtml</from-view-id>

    <navigation-case>
       <from-action>#{Admin.Validity}</from-action>
       <from-outcome>success</from-outcome>
       <to-view-id>/main.xhtml</to-view-id>
       <redirect/>
    </navigation-case>

    <navigation-case>
        <from-action>#{Admin.Validity}</from-action>
        <from-outcome>failure</from-outcome>
        <to-view-id>/login.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>
</faces-config>

ありがとうございました。Y

4

3 に答える 3

19

管理対象Beanの名前#{admin}は、

@ManagedBean(name="admin")

#{Admin}ただし、ナビゲーションの場合と同じようにアクセスしようとしましたが、

<from-action>#{Admin.Validity}</from-action>

だからそれは間違いなく動作しません。Javaでは大文字と小文字が区別されます。

それに応じて、ナビゲーションケースの管理対象Bean名を修正します。

<from-action>#{admin.Validity}</from-action>

具体的な問題とは関係なく、いくつかの小さな設計ミスがあります。

  1. 管理対象Bean名は、デフォルトで1文字目が小文字のクラス名になっています。したがって、あなた@ManagedBean(name="admin")はただに置き換えることができます@ManagedBean

    @ManagedBean
    @SessionScoped
    public class Admin implements Serializable {
    
  2. メソッド名は大文字で始めないでくださいValidity()に置き換えvalidity()ます。さらに、メソッド名にも文法/言語の間違いがありますが、それはおそらく言語の壁です。あなたは通常それvalidate()を、またはこの文脈でより良いauthenticate()か何かと名付けたでしょう。

  3. ナビゲーションケースはsooJSF1.xです。JSF 2.0以降、新しい「暗黙のナビゲーション」機能を利用できます。結果の値をマッピング/拡張子のないビューIDとして使用できます。

    public String authenticate() {
        if (username.equals("admin") && password.equals("admin")) {
            authenticated=true;
            return "main";
        } else {
            authenticated=false;
            return "login";
        }
    }
    

    <navigation-rule>このようにして、ブロック全体を完全に削除できます。

参照:

于 2012-08-28T12:01:50.283 に答える
0

ナビゲーションルールを正しく機能させるには、faceletファイルのデフォルトの拡張子として.xhtmlも定義してください。web.xmlに次の行を追加すると、ナビゲーションの問題が解決しました。

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
</context-param>

参照: http: //www.coderanch.com/t/570654/JSF/java/Error-navigation

于 2013-06-29T02:45:45.817 に答える
-2

問題が解決しました!私はjsf2ところで使用しています。

私はfaces-config.xmlから次の行を削除しました

<from-action>#{Admin.Validity}</from-action>

それでおしまい。これが誰かに役立つことを願っています

于 2012-08-28T11:38:19.680 に答える