日期:2014-05-18  浏览次数:20851 次

JSF生命周期的了解和感想...
第一阶段:恢复视图.
  仅仅重建组件树(视图).
  由FacesServletr控制器进行管理的"用户请求"(内容,一般为JSP)",创建唯一视图ID(XXX.JSP).
  如果是"回传",即视图存在,则直接使用.

第二阶段:应用请求值.
  用来自客户端的最新数据(即,上次输入的存放在托管Bean的属性里的值(第四阶段:更新模型值);如果是首次请求,即为Faces-config.xml里初始化的值.)更新这些服务器端组件(绑定属性的组件调用getXxx方法,从托管Bean的属性里获取其值). 
  如果Manage Bean(托管Bean) 的scope 为Request,则每次"用户请求"都要初始化托管Bean(Faces-config.xml里的Bean进行初始化,按Manage-rule 进行设置属性,如果显示说明的话).更新组件值,调用getXxx,即绑定属性的组件检索其值.
  如果托管Bean 已初始化,即scope=session并已"用户请求"过,则仅更新组件值,调用getXxx,即绑定属性的组件检索其值.
  如果请求值为空,则直接返回到第六阶段:渲染响应.

第三阶段:验证请求值
  进行验证请求.

第四阶段:更新模型值
  调用setXxx方法,更新托管Bean的属性值.

第五阶段:调用应用
  对队列里的事件进行调用.

第六阶段:渲染响应
  在视图中显示所有组件(调用getXxx方法给组件赋值,然后绘制出来传给用户) .

执行流程:
UserBean:userName=null;pw=null;i=1 //第二阶段:应用请求值. (初始化Bean)
setusername=null;i=2 // (初始化属性值)
setpw=null;i=3 // (初始化属性值)
getusername=null;i=4 //第六阶段:渲染响应. (更新组件值)
getpw=null;i=5 // (更新组件值)
---------------------------------- //进行回传
getusername=null;i=6 //第二阶段:应用请求值. 
getpw=null;i=7 //
setusername=123;i=8 //第四阶段:更新模型值.
setpw=;i=9 //
success;i=10 //第五阶段:调用应用.
getusername=123;i=11 //第六阶段:渲染响应.
getpw=ok;i=12 //
-------------------------------
getusername=123;i=13
getpw=ok;i=14
setusername=456;i=15
setpw=ok;i=16
success;i=17
getusername=456;i=18
getpw=ok;i=19


------解决方案--------------------
同感 我也刚做完一个JSF的项目