能否请这个圈子里高人讲解下JSF的生命周期管理?

Hotpepper 2007-08-23
刚学习JSF不久,不过已经深深被它吸引,这真是个令人兴奋的技术。

我崇尚技术,非常喜欢JSF,我非常高兴这里有个专门的社区在进行JSF的讨论,希望这里能繁荣起来,把所有JSF爱好者都吸引来,共同进步!

我刚开始学JAVA时,主要是学SWING开发桌面程序,现在学JSF时发现,用它进行开发时模式很像SWING那样,但不用象SWING般面对那么复杂繁琐的布局管理器,界面开发相当简单、而且页面代码非常的少、维护起来工作量也不大,不用面对那大堆大堆的<table>、<tr>、<td>了。

虽然现在正用JSF为我的项目做个WEB工具,系统也快做完了,现在回想下前期由于不清楚JSF生命周期的重要性、原理,直接上手去开发、设计,碰了不少壁(当时可痛苦死我了,很多情况认为理所当然的,结果在JSF面前就是不会有预期的结果),现在虽然掌握了些,但对JSF生命周期还是一知半解,希望有高人进行指点。

举个我碰到的小例子,<h:inputText id="id" value="#{user.id}" disabled="#{user.valid}/>,页面显示时这个控件根据用户是否合法来激活它,然后在页面中通过编辑改变它的激活状态,然后提交更改后的数据,结果在user.valid为true的情况下,怎么也没有办法让它在提交时取到值,后来才发现是因为一旦JSF的控件通过程序被设置为不激活,那么及时你在页面生成后通过JS将其激活,也无法改变JSF中控件的状态,所以它也就不会更改它的值了。当时这个可把我郁闷了一阵子哦。

按我的理解,要学好JSF,首先必须掌握JSF的生命周期管理,才能更好的使用JSF。
hunte 2007-09-13
JSF组件的状态是在后台保存的,前台通过JS来设计HTML控件的状态,并不表示同步到后台的COMPONENT上。

如果需要实现你要的效果,必须先提交一下到后台,由后台的JSF来重新渲染页面。
john.yi 2007-09-19
规范里已经讲得很清楚了
1。恢复视图:因为容器对组件进行缓存(目前实际主要是HTML元素),你可以结合组建ID来理解,生成的每个HTML空间都是有唯一ID的
2。应用请求值:因为有1。所以就需要从缓存取出组件,然后把HTTP提交过来的数据绑定到组件上,有点类似于对象池样的
3。转换和验证:先转换,再验证
4。更新模型值:如果通过了前3步,就把提交过来的值绑定到BACK BEAN相应的属性上
5。调用应用程序:就是你的BACK BEAN里面的方法
6。呈现响应:根据导航规则,呈现响应(绑定的组件已经有值了)
wincheer 2007-10-13
规范中讲的有些笼统,下面我说一下自己的理解。

1.恢复视图 -- JSF引擎将页面模型转换为树状的对象模型。此时只是一个模型而已,里面没有值。(如果说模具是不是更容易理解?)

2.应用请求值: -- 获取了页面传过来的值 ,这时候还没有把数据放到模型中,仅仅是拿到了“手上”。

3.转换和验证: ---- 检查一下“手上”这些数据是不是合法的合理的

4.更新模型值:---- 合法之后放到了模型中。这时候模型中才有了传过来的值,也就是被传过来的数据所填充。

5.调用应用程序:就是执行Action或者Listener方法

6.呈现响应: 把执行的结果返回给用户(response)

页面对应的java程序就是所谓的Backing Bean 。

btw:backingBean是页面对应的模型,属于managedBean(JSF管理的Bean)的子集
Global site tag (gtag.js) - Google Analytics