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>

管理员.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";
    }
}

}

面孔-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>

谢谢你。是

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 名称已经默认为第一个字符小写的类名。所以你@ManagedBean(name="admin")可以替换为@ManagedBean.

    @ManagedBean
    @SessionScoped
    public class Admin implements Serializable {
    
  2. 方法名称不应以大写字母开头。替换Validity()validity()。此外,方法名称中还有一个语法/语言错误,但这可能是语言障碍。您通常会为它命名,validate()或者在这种情况下更好地命名它authenticate()或其他东西。

  3. 导航案例是 JSF 1.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

为了使导航规则正常工作,请确保您还将 .xhtml 定义为 facelet 文件的默认扩展名。我在 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 回答