解开JSF生命周期之谜(1)

1、在恢复视图阶段,如果组件指定了binding属性,如:

 

 

那么JSF在恢复组件的时候,会初始化binding属性中指定的bean,假如bean的scope为request则会重新new一个该bean的实例(上面这个例子就是myForm),并根据faces-config.xml中指定的managed-property初始化该bean的各个属性;假如bean的scope为session则直接从session中获取bean的实例。

 

2、在恢复视图阶段,除了恢复组件树中的各个组件外,还会恢复与各个组件关联的事件监听器、验证器以及转换器。

 

3、在应用请求值阶段,事件会广播给对应的事件监听器。当事件源为UIData中的某条记录中的一个组件时,如:

 

 





.......

 

UIData会调用value属性指定的bean(上面这个例子为myForm对象)对应属性(上面这个例子为details属性)的get方法获取数据,如果数据为null或元素数为0,则不会广播该事件,即不会调用action或actionListener属性中指定的方法(上面这个例子为myForm的remove方法),并直接到呈现响应阶段。

 

4、结合上面第1和第3点可以得出以下结论。当事件源为UIData中的某条记录中的一个组件时,如果UIData有指定binding属性,则UIData的value属性指定的bean在faces-config.xml中指定的scope必须为session或application,否则不会执行action或者actionListener属性指定的方法。如果UIData没有指定binding属性,则UIData的value属性指定的bean在faces-config.xml中指定的scope可以为session、application,也可以为request,但要保证可以在request中找到对应的属性。

 

5、是在恢复视图阶段后才将属性值放到request中的。

 

 

你可能感兴趣的:(JSF学习笔记,JSF,Bean,XML)