AjaxUpdater是一个保持独立刷新的JSF页面容器,AjaxUpdater可以包含直接嵌入的JSF页面内容,也可以包含指定的资源文件。AjaxUpdater做为一个容器和整个页面的关系是既独立又统一。独立性体现在AjaxUpdater保持所包含内容的独立刷新,AjaxUpdater包含构件和服务器端产生交互时,AjaxUpdater区域内的内容被独立渲染和独立导航,而页面其它内容不会受到影响;统一性表现在,AjaxUpdater是整个页面构件树中的一个构件节点,在程序控制方面可像使用其它JSF构件一样去使用它。
表 32.31. 构件信息
| Component Type | org.operamasks.faces.component.ajax.AjaxUpdater |
| Component Family | org.operamasks.faces.AjaxUpdater |
| Component Class | org.operamasks.faces.component.ajax.AjaxUpdater |
| Tag Class | org.operamasks.faces.webapp.ajax.AjaxUpdaterTag |
| Renderer Type | org.operamasks.faces.component.ajax.AjaxUpdater |
| Renderer Class(AJAX) | org.operamasks.faces.render.ajax.AjaxUpdaterRenderer |
+java.lang.Object
++javax.faces.component.UIComponent
+++javax.faces.component.UIComponentBase
++++org.operamasks.faces.component.ajax.base.AjaxUpdaterBase
+++++org.operamasks.faces.component.ajax.AjaxUpdater
表 32.32. 属性
| binding | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | javax.el.ValueExpression(javax.faces.component.UIComponent) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。 | ||||
| charEncoding | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 字符编码 | ||||
| context | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 设置获取外部资源时使用的ServletContext。通过设置该属性,允许Updater包含同一服务器上其它ServletContext下的资源 | ||||
| frame | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否使用iframe引入页面 | ||||
| globalAction | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否忽略renderId,而使得updater内的action可影响updater外的组件更新,默认为false | ||||
| id | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | java.lang.String | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。 | ||||
| jsvar | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 客户端脚本使用的javascript变量名,引用脚本中OM.ajax.Updater的对象 | ||||
| layout | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 渲染这个组时使用的布局类型。如果这个值是"block",则渲染成HTML的"div"元素,否则渲染成"span"元素 | ||||
| renderId | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 指定一个id,相同renderId的updater可以同时刷新 | ||||
| rendered | 定义类 | javax.faces.component.UIComponentBase | ||
| 类型 | boolean(boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。 | ||||
| style | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件渲染时应用到构件的CSS风格,对应于元素的style属性 | ||||
| styleClass | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 构件渲染时应用到构件的CSS风格,对应于元素的class属性 | ||||
| update | 定义类 | org.operamasks.faces.component.ajax.AjaxUpdater | ||
| 类型 | javax.el.ValueExpression(java.lang.Boolean) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 是否初始化装载url指定的内容,如果设置为true,Updater在第一次被请求时会把url属性值作为初始化内容装载;设置为false,则Updater只在后续的ajax请求中才去装载资源 | ||||
| url | 定义类 | org.operamasks.faces.component.ajax.base.AjaxUpdaterBase | ||
| 类型 | javax.el.ValueExpression(java.lang.String) | |||
| 是否必须 | 否 | 延时求值 | 是 | |
| 初始时Updater构件装载的资源文件。Updater在初始化时装载该资源,之后该属性将不再直接使用(不应再对该属性置值),而应该通过调用 Updater的load(url)方法去更新url。注意:设置url属性后,Updater容器会使用url资源作为其内容,而忽略<ajax:updater>内嵌包含的JSP页面内容 | ||||
AjaxUpdater(org.operamasks.faces.component.ajax.AjaxUpdater)表示AjaxUpdater构件在服务器端的实例,可以通过设置ajax:updater的binding将它绑定到ManagedBean的指定属性。
表 32.33. 方法
| getSubviewId | 方法签名 | public java.lang.String getSubviewId() |
| 参数说明 | ||
| 返回值 | 当前subviewId。 | |
| 方法描述 | 获取当前subview的ID,其值由NavigationHandler根据导航结果决定 | |
| load | 方法签名 | public void load(java.lang.String url) |
| 参数说明 | url:需装载的外部资源的url | |
| 返回值 | ||
| 方法描述 | 应用程序代码可调用该方法装载新的资源文件去更新Updater内容 | |
| load | 方法签名 | public void load(java.lang.String url, java.lang.String context) |
| 参数说明 | url:需装载的外部资源的url;context:用于获取另外的web应用ServletContext的path。如果为null,则使用当前的ServletContext | |
| 返回值 | ||
| 方法描述 | 应用程序代码可调用该方法装载新的资源文件去更新Updater内容,该外部资源文件可以位于其它web应用中 | |
| reload | 方法签名 | public void reload() |
| 参数说明 | ||
| 返回值 | ||
| 方法描述 | 重新装载当前subview | |
| unload | 方法签名 | public void unload() |
| 参数说明 | ||
| 返回值 | ||
| 方法描述 | 卸载当前subview,Updater将会重新渲染默认的内容 | |
| getCharEncoding | 方法签名 | public java.lang.String getCharEncoding() |
| 参数说明 | ||
| 返回值 | 读取外部资源时使用的编码 | |
| 方法描述 | 获取如不能从外部资源文件内容确定编码时,而应该使用的编码 | |
| setCharEncoding | 方法签名 | public void setCharEncoding(java.lang.String charEncoding) |
| 参数说明 | charEncoding:读取外部资源时使用的编码 | |
| 返回值 | ||
| 方法描述 | 设置如不能从外部资源文件内容确定编码时,而应该使用的编码 |
下面的代码设置a:updater嵌入内容为"/simple.jsp",构件的客户端实例被命名为updater,"renderId"属性指定该Updater的分组为global。通过点击w:button激活onclick事件,调用Updater构件的客户端方法update(boolean),可以更新Updater容器区域的内容。
<a:updater styleClass="myUpdater" jsvar="updater" renderId="global" url="/simple.jsp" /> <w:button value="更新" onclick="updater.update(false);" />
通过服务器端的方法,可以更灵活的使用AjaxUpdater,下面的方法允许传入一个uri,如果改uri不是AjaxUpdater构件当前的subview,则更新AjaxUpdater内容为新的资源文件内容。
private void loadContent(String uri) {
updater.unload(); String viewId = updater.getSubviewId();
if (viewId == null || !viewId.equals(uri)) {
updater.load(uri);
}
}