| 
             阶段 
             | 
            
             说明 
             | 
        
| 
             恢复视图 
             | 
            
             为选定的视图找到或创建组件树。 
            一旦用户单击JSP页面上的链接或button,就会启动此阶段。JSF应用里的JSP页面被表示成一个组件树。JSF实现会进一步将这些组件链接到事件处理程序和验证程序,并将视图保存在FacesContext对象中,以备后面的处理过程所用。FacesContext对象包括了JSF用来管理当前会话中当前请求的GUI组件状态所须要的全部状态信息。 
             | 
        
| 
             应用请求值 
             | 
            
             使用请求中发送来的值来更新组件树的组件值。由于请求中发送来的值都是String类型的,所以在更新组件树的组件值之前,必须将这些值转换为对应类型。这个过程也是解码。若转换有错误,这些错误将加入?到FacesContext对象。 
             | 
        
| 
             处理验证 
             | 
            
             当每一个组件的本地值被更新后,Lifecycle对象都会依据这些注冊组件的验证规则来验证这些值的合法性。 
            假设输入的值不符合验证规则,就会将验证错误加入?至FacesContext对象,并将组件标记为无效。JSF将转至呈现响应阶段,并显示带有验证错误消息的视图。 
            假设没有遇到验证错误,JSF将进入下一阶段。 
             | 
        
| 
             更新模型值 
             | 
            
             更新与组件相关的后台bean(也叫管理bean)或者模型对象的值。仅仅有那些与组件值绑定在一起的Bean属性才会被更新。 
             | 
        
| 
             调用应用程序 
             | 
            
             JSF控制器调用应用程序来处理应用程序级的事件,如提交一个表单。(此阶段可运行业务逻辑) 
             | 
        
| 
             呈现响应 
             | 
            
             使用当前的显示技术(如JSP)显示选定的视图。 
             | 
        
| 
             <?xml version="1.0" encoding="UTF-8"?> 
            <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 
             <display-name>guessNumber</display-name> 
             <servlet> 
                <servlet-name>Faces Servlet</servlet-name> 
                <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
                <load-on-startup>1</load-on-startup> 
             </servlet> 
             <servlet-mapping> 
                <servlet-name>Faces Servlet</servlet-name> 
                <url-pattern>*.faces</url-pattern> 
             </servlet-mapping> 
            </web-app> 
             | 
        
| 
             package chapter5; 
            import java.util.Random; 
            public class UserNumberBean { 
                /** 用户输入的数字 */ 
                private int userNumber = 0; 
                /** 正确答案数字 */ 
                private int keyNumber = 0; 
                /** 最小值 */ 
                private int minNum = 0; 
                /** 最大值 */ 
                private int maxNum = 10; 
                /** 回应客户的信息字符串 */ 
                private String responseStr; 
                public UserNumberBean() { 
                     Random random = new Random(); 
                     keyNumber = random.nextInt(10); 
                     System.out.println("正确数字是:" + keyNumber); 
                } 
                public int getUserNumber() { 
                    return userNumber; 
                } 
                public int getKeyNumber() { 
                    return keyNumber; 
                } 
                public int getMaxNum() { 
                    return maxNum; 
                } 
                public int getMinNum() { 
                    return minNum; 
                } 
                public String getResponseStr() { 
                    if(userNumber == keyNumber){ 
                        return "您真聪明,您猜对了!"; 
                    }else{ 
                        return "对不起,您猜错了!不是"+ userNumber +"!"; 
                    } 
                } 
                public void setUserNumber(int userNumber) { 
                    this.userNumber = userNumber; 
                } 
                public void setKeyNumber(int keyNumber) { 
                    this.keyNumber = keyNumber; 
                } 
                public void setMaxNum(int maxNum) { 
                    this.maxNum = maxNum; 
                } 
                public void setMinNum(int minNum) { 
                    this.minNum = minNum; 
                } 
                public void setResponseStr(String responseStr) { 
                    this.responseStr = responseStr; 
                } 
            } 
             | 
        
| 
             <?xml version="1.0" encoding="UTF-8"?> 
            <!DOCTYPE faces-config PUBLIC  
            "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"  
            "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> 
            <faces-config xmlns="http://java.sun.com/JSF/Configuration"> 
            <managed-bean> 
            
            
            
             </managed-bean> 
            </faces-config> 
             | 
        
| 
             <%@ page contentType="text/html; charset=GBK" %> 
            <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
            <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
            <html> 
            <head> 
            <title>猜数字</title> 
            </head> 
            <body bgcolor="#ffffff"> 
            <f:view> 
             <h:form id="helloForm"> 
                <h2>请猜一个<h:outputText value="#{UserNumberBean.minNum}" /> 
                至<h:outputText value="#{UserNumberBean.maxNum}" />的数字</h2> 
            <h:inputText id="userNo" 
             value="#{UserNumberBean.userNumber}"> 
                 <f:validateLongRange minimum="#{UserNumberBean.minNum}" 
             maximum="#{UserNumberBean.maxNum}" /> 
                </h:inputText> 
            <h:commandButton id="submit" action="success" value="提交" /> 
            <br/> 
                <h:message style="color:red;" id="errors1" for="userNo"/> 
             </h:form> 
            </f:view> 
            </body> 
            </html> 
             | 
        
| 
             <%@ page contentType="text/html; charset=GBK" %> 
            <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
            <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
            <html> 
            <head> 
            <title>结果</title> 
            </head> 
            <body bgcolor="#ffffff"> 
            <f:view> 
             <h:form id="responseForm"> 
                <h2> 
                 <h:outputText id="result" value="#{UserNumberBean.responseStr}" /> 
                </h2> 
                <h:commandButton id="back" value="返回" action="success" /> 
             </h:form> 
            </f:view> 
            </body> 
            </html> 
             | 
        
| 
             <?xml version="1.0" encoding="UTF-8"?> 
            <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> 
            <faces-config xmlns="http://java.sun.com/JSF/Configuration"> 
             <managed-bean> 
                <managed-bean-name>UserNumberBean</managed-bean-name> 
               <managed-bean-class>chapter5.UserNumberBean</managed-bean-class> 
                <managed-bean-scope>session</managed-bean-scope> 
             </managed-bean> 
            <navigation-rule> 
            
            
            
            
                </navigation-case> 
             </navigation-rule> 
             <navigation-rule> 
                <from-view-id>/response.jsp</from-view-id> 
                <navigation-case> 
                  <from-outcome>success</from-outcome> 
                  <to-view-id>/guess.jsp</to-view-id> 
                </navigation-case> 
             </navigation-rule> 
            </faces-config> 
             | 
        
| 
             <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
            <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
             | 
        
| 
             <h:inputText id="userNo" value="#{UserNumberBean.userNumber}"> 
               <f:validateLongRange minimum="#{UserNumberBean.minNum}" 
            maximum="#{UserNumberBean.maxNum}" /> 
            </h:inputText> 
             | 
        
原文:http://www.cnblogs.com/yxwkf/p/3997831.html