jsf - 无法为操作 '/login.xhtml' 且结果为 '#{admin.Validity}' 的 from-view-id 'failure' 找到匹配的导航案例

标签 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>

管理程序
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
    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>

谢谢你。

最佳答案

您的托管 bean 名为 #{admin} ,

@ManagedBean(name="admin")

但是您试图以 #{Admin} 的身份访问它在导航案例中,
<from-action>#{Admin.Validity}</from-action>

所以肯定行不通。 Java 区分大小写。

相应地修复导航案例中的托管 bean 名称:
<from-action>#{admin.Validity}</from-action>

无关 对于具体问题,您有几个小的设计错误。
  • 托管 bean 名称已默认为第一个字符小写的类名。所以你的 @ManagedBean(name="admin")可以用@ManagedBean代替.
    @ManagedBean
    @SessionScoped
    public class Admin implements Serializable {
    
  • Method names should not start with uppercase .替换 Validity()来自 validity() .此外,方法名称中还有语法/语言错误,但这可能是语言障碍。你通常会把它命名为 validate()或者在这种情况下更好 authenticate()或者其他的东西。
  • 导航案例太 JSF 1.x。从 JSF 2.0 开始,您可以利用新的“隐式导航”功能。您可以将结果值用作映射/无扩展 View ID。
    public String authenticate() {
        if (username.equals("admin") && password.equals("admin")) {
            authenticated=true;
            return "main";
        } else {
            authenticated=false;
            return "login";
        }
    }
    

    这样你就可以删除整个 <navigation-rule>完全阻止。

  • 也可以看看:
  • Communication in JSF 2.0
  • 关于jsf - 无法为操作 '/login.xhtml' 且结果为 '#{admin.Validity}' 的 from-view-id 'failure' 找到匹配的导航案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12158234/

    相关文章:

    jsf - 使用纯JSF获取调用页面

    html - t :selectOneRadio is not working in tomahawk version 2. 0

    javascript - 结合 Primefaces 密码验证 : <p:password> and show/hide text/password icon together

    javascript - 自动完成输入文本事件

    java - f :convertDateTime support for Java8 LocalDate/LocalDateTime?

    date - 如何将 SelectOneMenu 标签中的日期转换为 dd/mm/yyyy

    spring - 静态代码分析与 Spring 和其他抽象的配合如何?

    jsf - 如何获取托管 bean 中的 inputText 值?

    jsf - 如何将丰富的参数传递给 i18n 的 jsf?

    javascript - 如何更改 JSF 表中的链接颜色