无法找到与from-view-id'/ login.xhtml'匹配的导航案例,以便将行为'#{admin.Validity}'与结果'失败'相关联

时间:2012-08-28 11:24:27

标签: jsf

我无法让它发挥作用。我得到以下内容:

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>
谢谢你。 ÿ

3 个答案:

答案 0 :(得分:17)

您的托管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. Method names should not start with uppercase。将Validity()替换为validity()。此外,方法名称中也存在语法/语言错误,但这可能是语言障碍。您通常将其命名为validate()或在此上下文中将其命名为authenticate()或其他内容。

  3. 导航案例是soo 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>块。

  4. 另见:

答案 1 :(得分: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

答案 2 :(得分:-1)

问题解决了!我正在使用jsf2 btw。

我从faces-config.xml

中删除了以下行
<from-action>#{Admin.Validity}</from-action>

就是这样。希望这有助于某人