`
wangzl2222
  • 浏览: 148002 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JSF Chapter03

阅读更多
本章主要包括三方面内容:

· 发送 Ajax Request

· 实现 Partial-Page 更新

· 了解什么数据将会被 process

 

 

1.       发送 Ajax Request

 

1)  四个 RichFaces 控件可以发送 Ajax Request 并允许 Partial-Page 更新

• <a4j:commandLink>

• <a4j:commandButton>

• <a4j:support>

• <a4j:poll>

 

2)  <a4j:commandLink> 与 <a4j:commandButton>

与标准的 <h:commandLink> 与 <h:commandButton> 非常相似,增加的功能:

• reRender 属性,用于指定哪些控件需要 Partial-Page 更新;

• 对于 Partial-Page 更新, action 方法的返回值应为 null 。 Response 将被用来更新 Browser 的 DOM 。

 

3)  <a4j: support>

• <a4j: support> 应该作为标准 JSF 控件的直接子控件( Direct Child )来使用。

• 关键属性 event ,用来指定哪个 DHTML event 将会引发 Ajax Request 。(实际上, <a4j:commandLink> 与 <a4j:commandButton> 是使用了“ onClick ” DHTML event 来引发 Ajax Request 。

• 至于能够指定哪些 DHTML 事件,取决于父控件能够支持哪些。

• 当在页面上混合使用 <a4j: support> 和 JavaScript 代码时,有可能导致不确定的结果,因为 JavaScript 代码有可能比 <a4j: support> “抢占先机”。

• 可以同时组合使用多个 <a4j:support> 以分别应对不同的 DHTML event ,比如 onClick 、 onkeyup 、 onkeydown 等。

 

4)  <a4j:poll>

• interval          指定多长时间向 Server 发送一次 Ajax Request ;

• enabled          是否启动自动发送 Ajax Request 功能;

• reRender              页面的哪些控件(部分)要被刷新;

将 <a4j:poll> 放置在一个独立的 form 里,这样在发送 Request 的时候,其他 form 里面的 Field 将不会被发送。

 

5)  limitToList 属性

• 能够引发 Ajax Request 的四种控件都有 limitToList 这个属性;

• 当 limitToList 设为 true 的时候,只有当前控件的 reRender 里面的控件会被刷新;

• 即使 <a4j:outputPanel ajaxRendered=”true”> 也不会被刷新。

 

 

2.       实现 Partial-Page 更新

 

1)  两种方法:

• reRender 属性

• <a4j:outputPanel ajaxRendered=”true”>

 

2)  使用 reRender 属性

• 通常是逗号分隔的 ID 列表;

• 当 reRender 指向一个容器类控件的时候,该容器控件中的子控件也将被刷新;

• 接受 EL 表达式,如 #{profile.renderList} ,以实现 reRender 控件列表的动态刷新;

• 接受 4 种格式: Set 、 List 、 String[] 、 String (逗号分隔 ID 列表)。

 

【注意】

EL 表达式只在 Render Response 阶段之前被解析,也就意味着,可以在 action 或 actionListener 里更新 reRender 控件列表。

通常情况下,页面里的 EL 表达式应该在 Update Model Value 阶段被解析( Update Model Value 阶段在 Invoke Application 阶段之前)。而此处, EL 表达式只在 Render Response 阶段之前被解析( Render Response 阶段在 Invoke Application 阶段之后),也就留给我们机会在 Invoke Application 阶段的 action 或 actionListener 里对 reRender 控件列表进行修改。如修改 #{profile.renderList} 里面的的 renderList 集合对象。

 

3)  使用 <a4j:outputPanel>

• <a4j:outputPanel> 与 <h:panelGroup> 很相似,是一个容器类的控件;它的 ID 也可以被添加到其他控件的 reRender 属性里。

• 当 <a4j:outputPanel> 的 ajaxRendered 属性被设为 true ,则其内部的控件总会被刷新。

 

 

3.       了解什么数据将会被 process

 

1)  使用 <a4j:region>

• 可以使用 <a4j:region> 来指定哪些控件将被 process ( Process 包括解码 decoding 、转换 conversion 、验证 validation 、更新模型值 model updating );

• 请注意,整个 Form 还是会被提交,只是在 region 中的控件会被 process ;

• 如果未指定 region ,则整个页面将作为一个 region ,也就意味着整个 form 被 process ;

• 对于嵌套 region ,当外部 region 里的 ajax 控件引发 Request 的时候,内部 region 里的控件也将一起被 process ;而当内部 region 里的 ajax 控件引发 Request 的时候,外部 region 里的控件则不会随之一起 process ;

 

【注意】切勿将 process 和 reRender 相混淆

<a4j:region> 只是表明哪些控件被 process (解码 decoding 、转换 conversion 、验证 validation 、更新模型值 model updating );而 Partial-Page 刷新还是得靠 reRender 和 <a4j:outputPanel> 负责。两者之间,概念不同。

 

2)  使用 ajaxSingle 属性

• 将 ajaxSingle 属性设为 true ,等同于将单个控件包装在 <a4j:region> 中。如:

<h:inputText value="#{profile.age}">

<a4j:support event="onblur" reRender="userInfo" ajaxSingle="true">

</h:inputText>

等同于

<a4j:region>

<h:inputText value=”#{profile.age}”>

<a4j:support event=”onblur” reRender=”userInfo”>

</h:inputText>

</a4j:region>

 

• 对于单独的 <a4j:commandButton> 或 <a4j:commandLink> , ajaxSingle 也可以设为 true ,也就是只有这个控件被 process 。

 

3)  使用 process 属性

• process 属性用于设置 region 外的控件随 region 内的控件一起 process ;

• 接受 4 种格式: Set 、 List 、 String[] 、 String (逗号分隔 ID 列表)。
from:http://blog.csdn.net/gengv/archive/2009/06/05/4246420.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics