在
第一个JSF程序
中,我们简单的定义了页面的流程由 index.jsp 到 welcome.jsp,接下来我们扩充程序,让它可以根据使用者输入的名称与密码是否正确,决定要显示欢迎讯息或是将使用者送回原页面进行重新登入。
首先我们修改一下UserBean:
package
onlyfun.caterpillar;
public
class UserBean {
private
String
name;
private
String
password;
private
String
errMessage;
public
void setName(String
name) {
this
.name = name;
}
public
String
getName() {
return
name;
}
public
void setPassword(String
password) {
this
.password = password;
}
public
String
getPassword() {
return
password;
}
public
void setErrMessage(String
errMessage) {
this
.errMessage = errMessage;
}
public
String
getErrMessage() {
return
errMessage;
}
public
String
verify() {
if
(!name.equals("justin"
) ||
!password.equals("123456"
)) {
errMessage = "名称或密码错误"
;
return
"failure"
;
}
else
{
return
"success"
;
}
}
}
在UserBean中,我们增加了密码与错误讯息属性,在verify()方法中,我们检查使用者名称与密码,它传回一个字符串,"failure"表示登入错误,并会设定错误讯息,而"success"表示登入正确,这个传回的字符串将决定页面的流程。
接下来我们修改一下 faces-config.xml 中的页面流程定义:
<?xml version="1.0"
?>
<!DOCTYPE faces-config PUBLIC
"-
"http:
>
<faces-config>
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case
>
<from-outcome>success</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case
>
<navigation-case
>
<from-outcome>failure</from-outcome>
<to-view-id>/pages/index.jsp</to-view-id>
</navigation-case
>
</navigation-rule>
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
根据上面的定义,当传回的字符串是"success"时,将前往 welcome.jsp,如果是"failure"的话,将送回 index.jsp。
接下来告诉网页设计人员Bean名称与相关属性,以及决定页面流程的verify名称,我们修改 index.jsp 如下:
<%@ taglib uri="http:
prefix="f" %>
<%@ taglib uri="http:
prefix="h" %>
<%@page contentType="text/html;charset=Big5"
%>
<html>
<head>
<title>第一个JSF程序</title>
</head>
<body>
<f:view>
<h:form>
<h3>请输入您的名称</h3>
<h:outputText value="#{user.errMessage}"
/><p>
名称: <h:inputText value="#{user.name}"
/><p>
密码: <h:inputSecret value="#{user.password}"
/><p>
<h:commandButton value="送出"
action="#{user.verify}"
/>
</h:form>
</f:view>
</body>
</html>
当要根据verify运行结果来决定页面流程时,action属性中使用 JSF Expression Language "#{user.verify}",如此JSF就知道必须根据verify传回的结果来导航页面。
<h:outputText>可以取出指定的Bean之属性值,当使用者因验证错误而被送回原页面时,这个错误讯息就可以显示在页面上。