我无法让它发挥作用。我得到以下内容:
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>
谢谢你。
ÿ
答案 0 :(得分:17)
您的托管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()
或其他内容。
导航案例是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>
块。
答案 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>
就是这样。希望这有助于某人