1. <rich:inplaceInput> 的 onXXXXXX 类属性
1) 这些属性包括:
· oneditactivation :当激活 edit 状态的时候,会触发 Ajax Request ;
· oneditactivated :当控件变为 edit 状态后,会触发 Ajax Request ;
· onviewactivation :当激活 view 状态的时候,会触发 Ajax Request ;
· onviewactivated :当控件状态变为 view 状态后,会触发 Ajax Request 。
· onchange 、 onblur 、 onkeyup 、 onkeydown 等。
在 <rich:inplaceInput> 发生状态改变或用户做某个操作的时候,这些属性是用来指定哪些 Ajax Javascript 代码会被调用。例如,
2) 但是上面这些属性,并不会引发 Ajax Request 。如果想要引发 Ajax Request 仍然需要 <a4j:support> 的支持。将上面那些 onxxxxxx 属性名传到 <a4j:support> 的 event 属性,才能引发 Ajax Request 。但是由于 <rich:inplaceInput> 输入方式的特殊性,即使设置某些 onxxxxxx 属性名到 <a4j:support> 的 event 属性,在发生相应 DHTML 事件的时候, <a4j:support> 也无法感知到。比如: onkeyup 。
我开始曾打算用 “onkeyup” 或 “onblur” 作为 event 属性值来相应引发 Ajax Request ,但是无法成功,换了 “onchange” 和 “onviewactivated” ,就 OK 了。
我本来想像下面这样,通过 onkeyup 引发 Ajax Request :
<rich:inplaceInput value="#{user.userName}" defaultLabel="User Name" showControls="true" layout="block">
<a4j:support event="onkeyup" actionListener="#{user.upperCaseUserName}" reRender="out1" ajaxSingle="true" bypassUpdates="true"></a4j:support>
</rich:inplaceInput>
但是没有效果,原因是 <rich:inplaceInput> 在编辑状态,产生的 onkeyup 只能引起 <rich:inplaceInput> 的 onkeyup 属性定义的 Javascript 代码,比如:
<rich:inplaceInput value="#{user.userName}" defaultLabel="User Name" showControls="true" layout="block" onkeyup=”alert(‘Typing…’)” >
</rich:inplaceInput>
于是我换了另一个事件, onchange :
<rich:inplaceInput value="#{user.userName}" defaultLabel="User Name" showControls="true" layout="block">
<a4j:support event="onchange" actionListener="#{user.upperCaseUserName}" reRender="out1" ajaxSingle="true" bypassUpdates="true"></a4j:support>
</rich:inplaceInput>
运行的结果是,当编辑完毕,光标点击到输入框外边的时候, Ajax Request 被引发。原因应该是此时控件已经可以感知到 DHTML 事件了。
我又尝试了几个其他的 DHTML 事件,目前来看,与在 edit/view 相切换状态下,能够引发 Ajax Request 的只有那 4 个状态改变事件 oneditactivation 、 oneditactivated 、 onviewactivation 、 onviewactivated 。比如:
<rich:inplaceInput value="#{user.userName}" defaultLabel="User Name" showControls="true" layout="block">
<a4j:support event="onviewactivated" actionListener="#{user.upperCaseUserName}" reRender="out1" ajaxSingle="true" bypassUpdates="true"></a4j:support>
</rich:inplaceInput>
当输入框从 edit 状态切换回到 view 状态以后, Ajax Request 被自动引发。
2. <rich:suggestionbox> 的 Ajax Request 问题
1) 问题的开端是,我想搞清楚在 suggestionbox 里面的值改变的时候,是否会引发 Ajax Request 提交;如果不会,如何实现这种自动提交。
2) 对于第一问,我做了一些测试,显示 suggestionbox 虽然会引发 Ajax Request ,并且经历 JSF 的完整生命周期,但是与其关联的输入框以及其他控件的值并不会被处理去更新模型值。道理现在还不太清楚,但可以推测引发 Ajax Request 是为了到 Server 去获取建议值范围,即引发 suggestionAction 监听器。但是经历了完整的 JSF 周期却没有更新模型值,这一点还有待进一步仔细考察。
3) 对于第二问,我曾经进入一个误区,以为 <rich:suggestionbox> 与输入框是两个分离的控件,要想实现通过选择建议值引发 Ajax Request 自动提交,需要给 <h:inputText> 加入一个 <a4j:support> , 并将其 event 属性设置为 “onchange” 或 “onobjectchange” 。
<h:inputText id="xcvr" value="#{cellPhoneBean.currentXcvr}">
<a4j:support event="onchange" ></a4j:support>
</h:inputText>
结果是 event 设为 “onchange” 时,选择建议值时不会引发 Ajax Request ,而当光标点击输入框外边的时候, Ajax Request 自动提交。而当 event 设为 “onobjectchange” 时,什么也不会发生。原因在于输入框根本不支持 onobjectchange 这种 DHTML 事件, onobjectchange 是 suggestionbox 支持的 DHTML 事件。现在才想起来之前介绍 <a4j:support> 时,书上所说的, event 属性依赖于其所在控件支持的 DHTML 类型。
4) 于是变换思路,通过选择建议值引发 Ajax Request ,根源还应该是 <rich:suggestionbox> 。于是我在 <rich:suggestionbox> 里加入一个 <a4j:support> ,并将其 event 属性设为 “onobjectchange” 时,并未产生需要的效果。原因在于 onobjectchange 就好像 <rich:inplaceInput> 的 onkeyup 一样,也是 <rich:suggestionbox> 的一个属性,用来在选择对象变化的时候,引发自定义 Javascript 代码。
5) 最终将 <a4j:support> 的 event 属性设置为 “onselect” ,终于得到了想要的结果,在选择建议值的时候, Ajax Request 自动提交更新了模型值。
3. 总结
由以上问题,可以得到以下几点简单结论:
1) <rich:> 控件也可以引发 Ajax Request ,比如 suggestionbox 向 Server 获取建议值。可以通过<a4j:>那四种控件的支持,引发页面提交。
2) <a4j:support> 的 event 属性所能使用的范围,还要依赖于其父控件所能支持 DHTML 事件的范围。
目前还有一个不太明白的问题就是在 <rich:inputNumberSpinner> 里按回车键会引发 Ajax Request 更新模型值的问题。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gengv/archive/2009/06/08/4252651.aspx
分享到:
相关推荐
《Java JSF Richfaces在办公自动化系统中的应用详解》 在现代企业信息化建设中,办公自动化系统的开发与应用已经成为提升工作效率、实现管理现代化的关键。本文将深入探讨如何利用Java、JSF(JavaServer Faces)...
### JBoss RichFaces 3.3:增强JSF Web应用程序的强大力量 #### 引言 《JBoss RichFaces 3.3》是一本专为希望利用强大的AJAX组件来增强JSF(JavaServer Faces)Web应用的开发人员而编写的书籍。作者Demetrio ...
dwRichFaces4Demo1 示例应用程序很简单;其惟一的真正目的是展示所选组件的设置和用法。因此,它的作用便是收集和显示输入数据。请想象一下如何在生产应用程序中使用数据和组件。除了必要的 JAR、图像、支持资源绑定...
《Practical RichFaces》这本书深入探讨了如何在JavaServer Faces (JSF) 应用程序中有效地使用RichFaces框架,从而实现高效的AJAX功能。 RichFaces是一个强大的JSF组件库,它极大地扩展了JSF的功能,特别是在提升...
### 实用RichFaces第二版——JSF与RichFaces深度解析 #### 一、概述 《Practical RichFaces, 2nd Edition》是一本专注于JavaServer Faces (JSF)及其增强库RichFaces的实用指南。本书旨在帮助开发者深入了解并充分...
《Practical JBoss Seam》是一本深入探讨JBoss Seam框架技术的书籍,其源代码包含在提供的压缩包中。Seam是一种开源的企业级Java框架,它整合了多种技术和概念,如JavaServer Faces (JSF)、Java Persistence API ...
RichFaces_3.3.3_TLD.chm
**标题解析:** "richfaces_helloWorld" 这个标题暗示了我们正在处理一个与RichFaces框架相关的示例项目,具体来说是一个“Hello World”应用。RichFaces是基于JavaServer Faces (JSF) 技术的开源用户界面组件库,...
《深入解析RichFaces 3.3用户指南:框架精髓与实战应用》 一、引言:RichFaces框架概览 RichFaces 3.3作为一款先进的企业级开发框架,为开发者提供了丰富的组件库以及强大的皮肤支持,极大地提升了Web应用程序的...
### RichFaces框架知识点详解 #### 一、简介 RichFaces是一款功能强大的开源JavaScript库与Java Server Faces (JSF) 集成的组件库,它提供了丰富的用户界面组件以及Ajax支持,大大简化了Web应用程序的开发过程。此...
**二、RichFaces组件详解** 1. **rich:calendar**:提供日期选择功能,支持多种格式,可配置是否显示星期、是否为多选等。 2. **rich:slider**:滑动条组件,用于数值选择或评级,可设置范围、步长、刻度标记等。 ...
**Richfaces ShowCase离线包** 是一个专为开发者设计的资源包,它包含了Richfaces框架的演示示例,能够帮助用户在没有网络连接的情况下也能深入理解和学习Richfaces的功能和用法。这个离线包特别适合那些需要在本地...
RichFaces是一个开源框架,专注于将Ajax功能无缝集成到JavaServer Faces(JSF)应用程序中,无需依赖JavaScript。这个框架充分利用了JSF的生命周期、验证、转换工具以及资源管理功能。它提供的Ajax支持是完全集成到...
RichFaces 4.5 是一个强大的JavaServer Faces (JSF) 框架的扩展库,专为构建富互联网应用程序(Rich Internet Applications, RIA)而设计。这个库提供了丰富的组件集,以及对JavaScript(JS)和Java API的支持,使得...