能否请这个圈子里高人讲解下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)的子集 |