我无法让它发挥作用.我得到以下内容:
Unable to find matching navigation case with from-view-id '/login.xhtml' for action '#{admin.Validity}' with outcome 'failure'
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
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>
Run Code Online (Sandbox Code Playgroud)
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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
谢谢.ÿ
Bal*_*usC 17
您的托管bean已命名#{admin},
@ManagedBean(name="admin")
Run Code Online (Sandbox Code Playgroud)
但是你试图#{Admin}在导航的情况下访问它,
<from-action>#{Admin.Validity}</from-action>
Run Code Online (Sandbox Code Playgroud)
所以它绝对不会起作用.Java区分大小写.
相应地修复导航案例中的托管bean名称:
<from-action>#{admin.Validity}</from-action>
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,你有几个小的设计错误.
托管bean名称已默认为classname,第一个字符为小写.所以你@ManagedBean(name="admin")可以被替换为@ManagedBean.
@ManagedBean
@SessionScoped
public class Admin implements Serializable {
Run Code Online (Sandbox Code Playgroud)方法名称不应以大写字母开头.替换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";
}
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以<navigation-rule>完全删除整个块.
| 归档时间: |
|
| 查看次数: |
28638 次 |
| 最近记录: |