说在前面:我的英文水平很低,翻译工作是拿着词典逐个词查这样进行的,翻译出来本来只是用来自己看的,但想到希望能对那些像我是JAVA及JSF的莱鸟有一定的帮助,所以把它放了上来。如有发现任何错误,请大家指点改正。
第5章。RichFaces框架的基本概念架
5.1 介绍
该框架是一个能在现有的页面增加Ajax的功能的组件库,所以你不需要写任何JavaScript代码或用新的Ajax工具集(widget)取代现有的组件。RichFaces具有页面范围(page-wide)的Ajax支持,而不是传统的组件范围(component-wide)的ajax支持。 因此,您可以在页面上定义事件调用一个AJAX请求和根据客户端触发的事件产生一个Ajax请求改变服务端的数据后,以JSF组件树同步页面的区域。
下面的图片展示了它是如何工作的:
图5.1 请求处理流程
RichFaces可以定义(依靠JSF标签)希望通过AJAX请求更新JSF页面的不同部分,并且提供的一些发送AJAX请求到服务器端的选项。并且新的JSF页面也不会改变的原来“正规” JSF的页面,你不需要用手写任何JavaScript或的XMLHttpRequest对象的代码,一切都是自动完成。
5.2 RichFaces架构概况
下面的图列出了RichFaces框架的几个重要的元素
Ajax的过滤器。
为得到RichFaces的所有好处,您应该在应用的web.xml文件注册一个过滤器。 过滤器识别多个请求类型。 过滤器配置的必要信息分布在“过滤器配置(Filter configuration)”节。 序列图的图3显示 “正常”JSF的请求和AJAX请求的不同的处理过程。
在第一种情况下整个JSF组件树的被编码,在第二种情况,这取决于的Ajax区域的“大小”可选地编码。 正如你所看到的,在第二种情况下,过滤器解析一个AJAX的响应的内容,然后递交给客户端。
看看下面一张图片,以了解这有两种方法:
图5.3 。请求处理序列图
在两种情况里,应用请求的静态或动态资源的信息,注册在ResourseBuilder类中。
当资源的请求来时(图4) ,RichFaces过滤器在资源缓存检查这一资源,如果它已经存在,把资源发送到客户端。否则,过滤器在登记在ResourceBuilder资源中搜索该资源。 如果资源是登记的, RichFaces过滤器将发出一个请求到 ResourceBuilder,要求创建(提供)该资源。
下一张图显示处理资源请求的方式。
AJAX的行为组件
AJAX的行为组件有: <a4j:commandButton> , <a4j:commandLink> , <a4j:poll>和<a4j:support>等,可以使用它们从客户端发送AJAX请求。
AJAX的容器
AjaxContainer在JSF页面画一个区域的一个界面,在AJAX的要求期间会被解码。 AjaxViewRoot和AjaxRegion是这个接口的实现。
JavaScript引擎
RichFaces JavaScript引擎运行在客户端。 它知道如何基于从AJAX响应的信息更新JSF页面的不同区域。 请勿直接调用此JavaScript代码,因为它可以自动执行(Do not use this JavaScript code directly, as it is available automatically)。
5.3 RichFaces主要部分
RichFaces同时提供了许多主要部分(框架,组件库) :
Prototype 1.6.0.3 [http://prototypejs.org]
jQuery 1.2.6 [http://jquery.com]
Script.aculo.us 1.8.1 [http://script.aculo.us]
欲了解更多有关框架和组件库,转到看到后面的章节中的常见问题[http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/faq/faq.html#d0e581] 。
注:
为了防止JavaScript版本的冲突,应该只使用一个版本的框架或组件库。 你可以找到更多关于组件库排除在常见问题解答(You could find more information about
libraries exclusion in the FAQ)[http://www.jboss.org/file-access/default/members/
jbossrichfaces/freezone/docs/devguide/en/faq/faq.html#d0e1546]。
5.4 。限制和规则
为了正确创建RichFaces应用,认真遵守以下几点:
Ø 任何Ajax框架不应在页面上追加或删除,但可替换内容。一个成功的更新,必须存在页面上和响应内容有相同ID。 如果想添加任何代码到页面,需为它放入一个占位符(任何空的元素)。 出于同样的原因,建议将信息放入的“ AjaxOutput ”组件(如没有消息也是一个讯息) 。
Ø 不要使用<f:verbatim>作自重绘(self-rendered)容器,因为这组件是短暂的,而不是储存在组件树上。
Ø AJAX请求是由XMLHttpRequest的函数用XML格式产生,但,可能会在浏览器中造成此XML绕过很多验证和纠正。 因此,只有创建严格的标准兼容代码的HTML和XHTML,不带跳过任何需要的内容或属性。 任何必要的XML的纠正自动被在服务器上的XML过滤器生成,但很多的意想不到的结果可能被不正确的HTML代码造成。
Ø RichFaces ViewHandler把自己插到Facelets ViewHandlers链的前端。
RichFaces组件使用自己的呈现。 在呈现响应阶段RichFaces框架作出了遍历该组件树,调用自己的呈现,把结果纳入FacesResponse。