JSF是基于事件驱动的
学习JSF 我们就要想想 我们的程序在C/S下是怎么运作的 !
其实它的生命周期是比较需要我们去了解,明确的
它的生命周期 有下面的几个阶段
1)恢复视图(Restore View)
根据请求访问的视图ID(页面地址),重建JSF 组件DOM树。如果JSF页面是第一次访问,也即是试图ID在内存中没没有存根,那么JSF会在内存中构建JSF组件的DOM树。但是组件并没有值,只是一个模子。。
2)应用请求值(Apply Request Values)
JSF组件获取请求中的属于自己的值,包括Local值,和submit值.同时处理转换,转换成功,更新local值(submit转换结果),当然过程没有那么简单,JSF处理器有自己的一套解码过程。
3) 执行验证
如果组件注册验证器,依次执行验证.
4)更新模型值:如果所有的组件本地值转换验证等均成功,此时JSF就会根据EL处理关联的bean,并更新bean绑定值.在此处JSF会根据EL绑定加载配置的后台bean。
5)调用应用:调用注册的侦听器,然后执行事件驱动,获取下一个视图。侦听器此时可以有效的侦听到UI组件的各项数据,事件驱动部分即action可以有效的获取被更新的后台bean数据。执行自己的业务逻辑。
6)渲染响应(Render Response)
到此请求处理结束,根据导航规则,渲染响应的页面.依次执行…
---------------------------------------------------------------》
JSF有如下 事件
1)动作事件:Action Event:普通动作响应
actionEvent是最普通的事件,任何command组件(button,link等,请参见UICommand)通过注册actionListener均可出发此事件侦听响应,简单说,用户有意义的操作,即可触发。
2)即时事件:Immediate Event:立即处理,不验证/转换/更新模型值(即bean不会保存属性)
即时事件,立即触发,在JSF生命周期中,让恢复试图之后,获取请求值,立即触发。验证、转化、更新模型值被略过,当然更多的情况下,你需要一个为被注册的UI组件binding到后台bean中,别忘了,你使用即时事件的初衷是什么??就是我只想让程序关注此组件,并排斥其他组件或者级联组件的操作。场景:单一表单中,使用“检测用户名是否存在”。立即时间,常用来做bean层面即时服务,以执行action为主要目的。
3)值改变事件:Value Change Event:选择UI值改变后,级联调度.如果国际化中选择语言.
4)阶段事件:Phase Event:监听响应的JSF生命周期
通过 这个我们可以利用 来做权限验证 可以看 http://jsjxqjy.iteye.com/admin/blogs/613918
==================================
学习JSF 我们需要更多更丰富的组件,来完成一些功能 ,例如myface 的tomahawk 目前可以用的版本是 1.1.9
大家可以去 http://myfaces.apache.org/tomahawk/download.html apache的官网下载 : tomahawk 组件目前支持 myface 1.2 及 sun的标准的JSF 1.2_12版本 ,
还有 jBoss开源组织的richFace ,说实话 ,richface的确做得漂亮 . 目前我使用的版本是 3.3.2
================RichFaces 3.3.1:开发使用 文档
http://docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/index.html
//例子 richFace demo
http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?c=sorting&tab=usage