A4J 用户指南.docx
《A4J 用户指南.docx》由会员分享,可在线阅读,更多相关《A4J 用户指南.docx(54页珍藏版)》请在冰豆网上搜索。
![A4J 用户指南.docx](https://file1.bdocx.com/fileroot1/2023-5/20/8c57950d-e89b-4d2f-8e3f-c688a38f39e8/8c57950d-e89b-4d2f-8e3f-c688a38f39e81.gif)
A4J用户指南
A4J用户指南
Copyright©2006Exadel
译者:
icess()
转载请保留版权标识和译者信息.
目录
1.介绍
2.开始使用Ajax4jsf
环境需求
下载Ajax4jsf
安装
简单的AJAXEcho项目
JSP页面
数据Bean
faces-config.xml
Web.xml
部署
3. Ajax4jsf框架的基本概念
介绍
结构概览
如何做...
发送一个AJAX请求
决定发送什么
决定改变什么
4.Ajax4JSF组件库
a4j:
ajaxListener
a4j:
region
a4j:
page
a4j:
support
a4j:
commandLink
a4j:
commandButton
a4j:
outputPanel
a4j:
actionparam
a4j:
status
a4j:
loadBundle
a4j:
mediaOutput
5.Ajax4jsf内建的换肤功能
6.技术要求
支持的java版本
支持的JavaServerFaces实现
支持的服务器
支持的浏览器
7.附加的设置
Web程序描述符参数
SunJSFRI
ApacheMyFaces
Facelets支持
JBossSeam支持
8.与IDE集成
9.ExadelVCP和Ajax4jsf
10.Web上的资源
ListofTables
4.1.a4j:
ajaxListenerattributes
4.2.a4j:
regionattributes
4.3.a4j:
pageattributes
4.4.a4j:
supportattributes
4.5.a4j:
commandLinkattributes
4.6.a4j:
commandButtonattributes
4.7.a4j:
outputPanelattributes
4.8.a4j:
actionparamattributes
4.9.a4j:
statusattributes
4.10.a4j:
loadBundleattributes
4.11.a4j:
mediaOutputattributes
7.1.InitializationParametres
7.2.org.ajax4jsf.FilterInitializationParametres
10.1.Ajax4jsfResources
序言:
Ajax4JSF是一个很容易使用的框架.
有什么问题可以在JSF中文论坛讨论.
Chapter 1. 介绍
这里是一些介绍a4j的内容,暂时先不翻译了,等有时间再补充上.
Ajax4jsf是一个添加Ajax功能到JSF项目中的开源框架,使用该框架不用写JS代码.
Ajax4jsf充分利用了JSF框架的优点,如:
生命周期,验证,转换的灵活性和受管理的静态和动态资源.使用Ajax4jsf,具有Ajax支持的富组件和高度可自定义的外观感觉可以很容易的与JSF结合起来.
Ajax4JSF被设计用来:
在使用Ajax时充分显示JSF的优点.Ajax4jsf完全被结合到JSF生命周期中.当其他框架仅仅给你访问ManagedBean的便利时,Ajax4JSF带给你Action和ValueChange监听器,激活服务端验证,在Ajax请求-响应周期中的转化这些功能.
添加AJAX功能到已经存在的JSF项目. 该框架被实现为使用一个组件库来添加ajax功能到你的页面中,而不要写js代码或者使用新的Ajax装饰器替换你已经做好的JSF组件.Ajax4jsf具有页面范围(page-wide)的Ajax支持,而不是传统的组件范围(component-wide)的ajax支持. 这意味着你可以在页面中定义一个激活Ajax请求的事件,和当根据客户端事件触发Ajax请求来改变服务器端数据后如何使用JSF组件树来同步显示JSF页面.
使用内建的Ajax支持写自定义富组件. 将来,我们将有一个完全的组件开发包(CDK)来支持AJax4JSF.CDK将包含代码生成工具和一个使用类似JSP语法的模版工具.这些功能将去除一些创建组件的一个例行工作.使用这个喝满油的组件工厂机器来创建一个带有Ajax功能的富组件将比使用传统的编码过程创建一个简单的组件还要简单.
项目的Java类与资源包. 除了核心的AJAX功能外,Ajax4jsf也有管理资源的高级支持,例如:
图片,JS代码和CSS样式表单,资源框架使简单的打包这些资源到你自定义组件的Jar文件中成为可能.
动态(on-the-fly)将非常容易. 作为另外一种附加的功能,资源框架有一个动态产生图片的工具.使用这个特性,你可以使用类似于使用JavaGraphic2D库的方法来创建图片.
使用基于皮肤的技术来创建一个现代富用户界面的外观感觉(look-and-feel). Ajax4jsf提供一个换肤特性.该特性允许通过命名的皮肤参数来简单的定义和管理不同颜色模式与其他UI特性.你可以从JSP代码和Java代码(例如:
基于UI的文本来产生动态的图片)来访问这些皮肤参数.注意:
虽然换肤功能不是完全的替代传统的CSS,但是它还是值得称赞的.
测试components,actions,listeners,和pages就像你在创建他们一样容易. 一个制动测试工具正在开发中.它将在你开发组件使为你的组件产生测试案例.该测试框架不仅仅测试组件,也测试服务端和客户端的功能包括JS代码.作为附加的有用工具,你不需要单独的部署测试程序到Servlet容器中就可以做到这些了.
Ajax4JSF组件已经可以使用了,因此开发者可以立即使用这种省时的具有高级特性的工具来创建提供了更快更可靠的用户体验的Web程序了.
Chapter 2. 开始使用Ajax4jsf
TableofContents
Environment
DownloadingAjax4jsf
Installation
SimpleAJAXEchoProject
JSPPage
DataBean
faces-config.xml
Web.xml
Deployment
环境要求
要使用Ajax4JSF框架你仅仅需要JDK1.4或者更高,任何JSF实现,和你最喜欢的Servlet容器.在下一章我们将给你提供详细的环境信息.
Ajax4jsf被设计为一个容易使用的框架.仅仅有一点简单的设置步骤就可以在你的JSF程序中使用Ajax功能了.
下载Ajax4jsf
最新的Ajax4jsf发布版在这里下载.
安装
∙解压ajax4jsf.zip文件.
∙复制ajax4jsf.jarandoscache-2.2.jar到程序的WEB-INF/lib文件夹下.
∙把下面的内容添加到你的程序的WEB-INF/web.xml文件中:
∙
∙Ajax4jsfFilter
∙ajax4jsf
∙org.ajax4jsf.Filter
∙
∙
∙ajax4jsf
∙FacesServlet
∙REQUEST
∙FORWARD
∙INCLUDE
∙
注意.你可以复制和粘贴上面的内容在README.txt文件中.
∙添加下面的内容:
∙<%@tagliburi="prefix="a4j"%>
到你每个使用Ajax功能的JSP页面中.
简单的AJAXEcho项目
让我们来看一个简单的JSF项目.我们仅仅需要一个JSP页面,里面包含一个Form和一些JSF标签:
inputText>和outputText>.
我们这个简单的程序应该可以让我们输入一些文字到inputText>中,然后发送数据到Server,并在outputText>中显示Server的响应(给我们一个Echo信息).
JSP页面
下面是一个我们需要的页面代码(echo.jsp):
<%@tagliburi="prefix="a4j"%>
<%@tagliburi="prefix="h"%>
<%@tagliburi="prefix="f"%>
repeater
view>
form>
inputTextsize="50"value="#{bean.text}">
supportevent="onkeyup"reRender="rep"/>
inputText>
outputTextvalue="#{bean.text}"id="rep"/>
form>
view>
就如你看到的,唯一一行于常给JSF页面代码不同的就是下面的一行
supportevent="onkeyup"reRender="rep"/>
在这里我们在父标签(inputText>)中添加了一个AJAX支持.该支持绑定了JavaScript事件“onkeyup”.因此,每一次该事件发布给父标签时,我们的程序将发送一个AJAX请求到Server.这意味着我们的受管理的bean将包含该“text”域中我们输入的最新数据.
support>标签的“reRender”属性(attribute)定义我们的页面的哪一部分被更新.在这里,该页面唯一被更新的部位是outputText>标签,因为他的ID值和“reRender”的属性值向匹配.在一个页面中更新多个元素(elements)也是很简单的:
仅仅把他们的IDs放在“reRender”属性中就可以了.
数据Bean
当然了,为了运行这个程序我们还需要一个受管理的bean
packagedemo;
publicclassBean{
privateStringtext;
publicBean(){
}
publicStringgetText(){
returntext;
}
publicvoidsetText(Stringtext){
this.text=text;
}
}
faces-config.xml
下一步,我们需要在faces-config.xml中注册上面的bean:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEfaces-configPUBLIC"-//SunMicrosystems,Inc.//DTDJavaServerFacesConfig1.1//EN"
"
bean
demo.Bean
request
text
注意:
这里没有任何东西直接和Ajax4jsf有关联.
Web.xml
最后,不要忘了添加jar文件和更改web.xml文件:
xmlversion="1.0"?
>
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
a4jEchoText
javax.faces.STATE_SAVING_METHOD
server
Ajax4jsfFilter
ajax4jsf
org.ajax4jsf.Filter
ajax4jsf
FacesServlet
REQUEST
FORWARD
INCLUDE
com.sun.faces.config.ConfigureListener
--FacesServlet-->
FacesServlet
javax.faces.webapp.FacesServlet
1
--FacesServletMapping-->
FacesServlet
*.jsf
BASIC
就这样了,现在你的程序应该可以工作了.
部署
最终,你可以在Servlet容器中部署你的程序了.在你喜欢的容器中部署,然后在你的浏览器中输入:
http:
//localhost:
8080/a4jEchoText/echo.jsf
Chapter 3.Ajax4jsf框架中的基本概念
TableofContents
Introduction
ArchitectureOverview
HowTo...
SendanAJAXRequest
DecideWhattoSend
DecideWhattoChange
介绍
该框架被实现为使用一个组件库来添加ajax功能到你的页面中,而不要写js代码或者使用新的Ajax装饰器替换你已经做好的JSF组件.Ajax4jsf具有页面范围(page-wide)的Ajax支持,而不是传统的组件范围(component-wide)的ajax支持. 这意味着你可以在页面中定义一个激活Ajax请求的事件,和当根据客户端事件触发Ajax请求来改变服务器端数据后如何使用JSF组件树来同步显示JSF页面.(ThismeansyoucandefinetheeventonthepagethatinvokesanAJAXrequestandtheareasofthepagethatshouldbesynchronizedwiththeJSFComponentTreeaftertheAJAXrequestchangesthedataontheserveraccordingtotheeventsfiredontheclient).
下面的图片展示了它是如何工作的:
Ajax4jsf允许你定义(意味着通过JSFtags)你希望通过AJAX请求更新的JSF页面的不同部分并且提供的一些发送AJAX请求到服务器端的选项,除了你的JSF页面于常规的JSF有点不同外,没有其他的不同了,这是一个你不需要写JS代码和XMLHttpRequest对象的天堂.
结构概览
下面的图片展示了Ajax4jsf框架的一些重要的元素
Ajax过滤器(Filter). 为了得到应用Ajax4jsf的好处你必须在在web.xml文件中注册一个AjaxFilter.该过滤器有一些职责.AjaxFilter可以识别多种ajax请求种类.图片3的序列图展示了在处理常规页面和AJAX请求页面的不同之处.在开始的情况下,所有的JSF树将被编码(encoded).在第二种情况下依据AJAX区域(region)(你可以通过使用region>tag来定义AJAXregion )的大小(size).就如你看到的,第二种情况下过滤器将解析AJAX响应的内容,在它被发送到客户端以前,查看下面的图片来理解这两种方式:
在这两种情况下,你的程序所需要的静态或者动态资源的信息将被注册到ResourseBuilder类中.当请求一个资源时(图片4),AJAXfilter检查资源缓存(ResourceCache)看看这个资源是否存在,如果存在该资源将被送到客户端.否则过滤器将在ResourceBuilder中搜索注册的资源.如果该资源被注册了,AJAXfilter将发送一个请求到ResourceBuilder来创建[create(deliver)]该资源.下面的图片显示了请求资源的处理过程.
Ajax动作组件(ActionComponents). 有3个Ajax动作组件:
AjaxCommandButton,AjaxCommandLink和AjaxSupport.你可以使用他们从客户端发送AJAX请求.
Ajax容器(Containers). AjaxContainer是一个接口,该接口描述了在Ajax请求中应该被解码(decoded)的JSF页面中的一个区域.AjaxViewRoot和AjaxRegion实现了该接口.
JavaScript引擎(Engine). Ajax4jsfJavaScript引擎在客户端运行.它知道如何根据来自于Ajax响应的信息来更新你JSF页面上的不同的区域.程序开发者不需要直接使用这里的JavaScript代码.它自动的下载到客户端.
如何做...
发送一个AJAX请求
从JSF页面发送ajax请求有不同的方法.你可以使用commandButton>,commandLink>或者support>tags.
所有的这些标签隐藏了在创建一个XMHttpRequest对象和发送ajax请求所需要的JavaScript活动.并且,他们允许你选择页面中那个JSF组件被重新渲染(re-rendered)来表现Ajax响应的结果(你可以列出他们的IDs在“reRender”属性中).
commandButton>和commandLink>tags用来在“onclick”JavaScript事件中发送Ajax请求.
在你选择JS事件(“onkeyup”,“onmouseover”,etc)时,support>tag允许你在普通的JSF组件中添加Ajax功能和发送ajax请求.
提供Ajax请求功能的大部分重要的属性如下:
∙reRender属性-就如我们前面提到过的,在一个Ajax响应到来时重新渲染(reRendered)组件.
∙RequestDelay属性–用来调节请求的频率.
∙inputTextsize="50"value="#{bean.text}">
∙supportevent="onkeyup"RequestDelay=”3”/>
∙
inputText>
因此每一个来自于键盘事件的请求将会延迟3ms,来减少请求的次数.
∙EventsQueue–储存下一个请求的队列的名字.队列帮助阻止下一个请求知道当前的处理完.
∙LimitToList用来控制更新的区域.设置为true–将更新仅在reRenderlist中的区域,如果为false,将更新所有OutputPanels区域.
∙ajaxSingle如果设置为false用来指定发送请