32.14. <ajax:updater>

AjaxUpdater是一个保持独立刷新的JSF页面容器,AjaxUpdater可以包含直接嵌入的JSF页面内容,也可以包含指定的资源文件。AjaxUpdater做为一个容器和整个页面的关系是既独立又统一。独立性体现在AjaxUpdater保持所包含内容的独立刷新,AjaxUpdater包含构件和服务器端产生交互时,AjaxUpdater区域内的内容被独立渲染和独立导航,而页面其它内容不会受到影响;统一性表现在,AjaxUpdater是整个页面构件树中的一个构件节点,在程序控制方面可像使用其它JSF构件一样去使用它。

32.14.1. 构件信息

表 32.31. 构件信息

Component Typeorg.operamasks.faces.component.ajax.AjaxUpdater
Component Familyorg.operamasks.faces.AjaxUpdater
Component Classorg.operamasks.faces.component.ajax.AjaxUpdater
Tag Classorg.operamasks.faces.webapp.ajax.AjaxUpdaterTag
Renderer Typeorg.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.14.2. 属性

表 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页面内容

32.14.3. 构件API

32.14.3.1. AjaxUpdater

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:读取外部资源时使用的编码
返回值  
方法描述 设置如不能从外部资源文件内容确定编码时,而应该使用的编码

32.14.4. 例子

下面的代码设置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); 
    } 
}