日期:2014-05-16 浏览次数:20393 次
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630
?
在 第一个JSF程序 中,我们简单的定义了页面的流程由 index.jsp 到 welcome.jsp,接下来我们扩充程序,让它可以根据使用者输入的名称与密码是否正确,决定要显示欢迎信息或是将使用者送回原页面进行重新登入。
?
一、修改一下UserBean:
package bruce.zhao.model; 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.equalsIgnoreCase("Bruce") || !password.equals("123456")) { errMessage = "名称或密码错误"; return "failure"; } else { return "success"; } } }
在UserBean中,我们增加了密码与错误信息属性,在verify()方法中,我们检查使用者名称与密码,它传回一个字符串,"failure"表示登入错误,并会设定错误信息,而"success"表示登入正确,这个传回的字符串将决定页面的流程。
?
二、faces-config.xml 中的页面流程定义:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd"> <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> bruce.zhao.model.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://java.sun.com/jsf/core" prefix="f"%> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@page contentType="text/html;charset=GB2312"%> <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> <p>密码: <h:inputSecret value="#{user.password}" /></p> <p><h:commandButton value="送出" action="#{user.verify}" /></p> </h:form> </f:view> </body> </html>
?action属性中使用 JSF Expression Language "#{user.verify}",用户点击“送出”button的时候,相当于调用了UserBean的verify方法。outputText里面user.errMessage相当于调用了UserBean的getErrMessage方法,如果这个get方法没有值,就不显示。user.verify如果验证错误,会setErrMessage,这时候再返回index页面,页面上就会有错误信息。