事实上,我认为Ajax是一种过渡技术,相信在未来一到两年之内将被新的技术所代替,是微软的XAML、Mozilla的XUL、还是任何可能的RIA标准,实际上整个业界都在观望。但不管采用什么技术,JSF都能适应,对JSF来说适应一个新技术只是更换一个Render Kit而已。举一个例子,如果想在网页中实现图表功能(Chart),MSIE有VML,Gecko和Opera有SVG,而在服务器端只需要简单地判断一下浏览器类型就可以选择一个Render Kit生成不同的markup来完成相同的功能,这是用常规JSP技术很难完成的任务。
3 Apusic JSF:中国人做出的JSF引擎
3.1 容器级别的Ajax支持
目前有JSF + Ajax这种思路的,恐怕也不是金蝶中间件一家,但很多第三方的JSF + Ajax实现是提供一个组件库以及一个附加的Servlet 或Filter来处理Ajax请求,而我们是直接由JSF容器来处理Ajax请求的。我们会根据请求的类型来判断这是一个正常的HTTP请求还是一个 Ajax请求。如果是一个常规HTTP请求就运行JSP页面,生成页面文档(并且我们会在生成的页面文档中嵌入Ajax所必须的Java Script代码,后文提及);如果该请求是一个Ajax请求,服务器对请求参数正常解码,并执行JSF中除页面输出阶段以外的所有其他阶段,这时将生成一个JSF的组件树,遍历该组件树,从中找出发生变化的数据,并将这些数据打包成一个Ajax应答,并由客户端来更新这些修改的数据,甚至改变页面外观。
在JSF规范中,JSF页面输出阶段所采用的Render Kit是可替换的,默认的HTML_BASIC Render Kit输出的是标准的HTML语法,不包含任何Java Script代码,Apusic JSF引擎实现了一个 AJAX Render Kit,可以在HTML文档中嵌入Java Script代码来实现Ajax特性,而替换Render Kit只需要修改配置文件即可。
那么,这样能够带来怎样的好处呢?
3.2 提升JSF运行性能,带来更好的人机体验。
常规JSF容器在状态维护方面的通用做法是:基于Session的,或者基于请求传递型的,这就意味着,当每进行一次客户端与服务器端的响应时,都需要把所有的状态传来传去,这无疑会对系统的运行性能带来较大的负面影响,从而使开发人员误以为:JSF是一种重量级的技术模型。
而通过Apusic JSF的Ajax特性,我们能够只把发生变化的数据打包成Ajax请求发送给服务器端,而服务器端也只会将发生变化的数据打包成Ajax应答,从而大大提升系统的运行效率。并且,传统的JSF请求应答将刷新整个页面,而Apusic JSF将只更新发生变化的客户端组件,从而给客户带来更好的人机体验。
3.3 简化Ajax的开发
以前要写Ajax应用要写很多Java Script代码,开发、调试、维护这些 Script脚本都相当烦琐,如果采用Apusic JSF技术,你不再需要编写任何Java Script代码,引擎已经帮你生成了这些代码。Apusic JSF所有的标准组件都是支持Ajax的,某些第三方组件可能本身并不支持 Ajax,但使用一个名为<ajax:renderGroup>的标签,可以立即将这个第三方组件转换成Ajax Enabled。例如Apache myfaces的Tomahawk项目提供了一个Tree

