`

Seam与Richface性能及错误处理

阅读更多

转自:http://www.enthp.com/thread-22-1-1.html

 

org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized component
1.       用队列控制 Event Traffic
1)  以下两个属性用来避免由频繁的 DHTML 事件所引发大量的 request 请求。
-  eventsQueue
-  requestDelay
2)  对于能够引发 Ajax Request 的 4 种控件来说,以上两种属性都是可用的。
3)  eventQueue 属性
-  将 eventQueue 属性指定一个对列名,则在当前一个 Request 被 Server 处理而 Response 还未被发回之前,下一个 Request 都将停留在队列里,以等待 Response 被发回。
-  队列里总保持只有一个待发的 Request ,所有后续的 Request 都会将前面未发的 Request 清除掉。
比如,当你在 <a4j:support event="onkeyup"> 的文本框中输入第一个字符' a ',则第一个 Request 会被立即发到 Server ,但在 Response 被发回之前,你又输入了' b ',则文本框里的值变为' ab ',但这个 Request 只能等待第一个 Response 被发回来以后才能被送出。而此时,你又输入了第三个字符' c ',则' abc '的 Request 就回把队列里还没来得及发出去的' ab '的 Request 清除掉。此时,第一个 Response "终于"回来了,则' abc '的 Request 才被顺利的发出去。
-  大致测试了一下,当多个控件将队列名都设为同一个的时候,比如 eventsQueue = fooQueue ,控件之间的 Request 不会相互干扰,也就是说控件 B 的新的 Request ,并不会把同一队列中控件 A 的未发的旧 Request 清除掉。
4)  requestDelay 属性
-  单位毫秒 ms ,用来定义 Request 被发送出去之前,需要在队列里强制等待的时间。即使前面一个 Request 都没有,也必须老老实实等着到点。
-  可以将 eventsQueue 和 requestDelay 一起使用。
5)  ignoreDupResponse 属性
-  将此属性设为 true ,则当同一控件发出新的 Request 的时候,当前的 Response 将被 Ajax 忽略掉。
     注意,之前的 Request 在 Server 上已经被处理,只是 Response 在 Client 上被忽略掉了。
-  eventsQueue 和 ignoreDupResponse 的区别在于:
     前者的 Response 总是会被 Client 处理,然后队列中的 Request 才被发出,属于"先来后到";而对于后者来说,一旦发现同一控件又有了新的 Request ,则立即抛弃现有的 Response ,属于"喜新厌旧"。
-  如果设置了 ignoreDupResponse 而没有设置 eventsQueue ,则系统会根据控件的 ID 创建一个默认的事件队列。
2.       JavaScript 交互
1)  调用自定义的 JavaScript 函数
尽管使用 RichFaces 时不用写 JavaScript ,但 RichFaces 仍然允许你调用自定义的 JavaScript 函数。
-  onsubmit :仅当 Ajax Request 被发送之前;
-  onbeforedomupdate :仅当 DOM 更新被处理之前;
-  oncomplete : 当 DOM 更新被处理完毕之后。
2)  data 属性
-  可以从 Server 上得到任何额外的数据,可以通过 EL 表达式简单地将 data 属性指向 bean property ,然后数据将会按照 JSON 的格式串行化到客户端。比如:
<a4j:commandButton value="Submit" reRender="out"
data="#
Unknown macro: {bean.text}
"/>-  除了基础类型,其他可以被串行化的复杂类型(数组、集合),也可以加入 JSON 格式。
3.       性能方面的考虑
1)  使用 eventsQueue 和 requestDelay
2)  使用 bypassUpdate 属性
当此属性设为 true 的时候, Update Model 和 Invoke Application 阶段将会被跳过,从而缩短响应时间。通常用在表单验证上。
3)  使用 <a4j:region>
-  当 renderRegionOnly 属性被设为 true 时, Browser 将只刷新当前 Region ,也就是发出 Ajax Request 的 Region 。对于 Region 以外的, Partial-Page 刷新将不会被处理。
-  当 renderRegionOnly 属性被设为 true 时,只有同时 满足以下两点的部分会被刷新:
     控件必须在引发 Ajax Request 的 Region 里;
     被设置为需要刷新(在当前 Region 的其他控件的 reRender 里或者在 <a4j:outputPanel ajaxRendered="true"> 里)。
其他的部分一概不会被刷新。
-  selfRendered 属性
4.       验证用户输入(实例)
1)  使用 <a4j:region> 或者 ajaxSingle 属性来限制 process 的 Region ,以避免控件间相互干扰。
2)  使用 <rich:message> 来显示错误信息。
3)  使用 <a4j:region> 以及 renderRegionOnly 属性,而不是 ajaxSingle ,来避免错误信息被其他控件的单独 process 而被清除掉。
4)  使用 bypassUpdate 属性来跳过 Update Model 和 Invoke Application 阶段。
5.       使用 <a4j:actionparam>
1)  <a4j:actionparam> 可以被认为是 <f:param> 和 <f:actionListener> 的组合:
-  <f:param> - 在 request 中传递参数;
-  <f:actionListener> - 设置 Bean property 的值。
2)  与 <f:setPropertyActionListener> 非常相似:
-  value 对应 value ;
-  assignTo 对应 target ;
-  name 、 converter 没有对应。
【注意】因为需要向 request 传递参数,因此 name 属性一定不能少。
3)  不同点:
-  <a4j:actionparam> 向 request 传参数,因此当要传的不是 String 的时候,需要 Converter 的支持;而 <f:setPropertyActionListener> 是直接设置 Bean property ,因此它不需要指定 Converter 。
-  <f:setPropertyActionListener> 因为是 <f:actionListener> 类的 ActionListener ,因此总比 actionListener 属性类的方法调用的晚(《 JSF 核心编程》)。因此想用 <f:setPropertyActionListener> 给 actionListener 属性类的方法传递数据,恐怕不可行。但 <a4j:actionparam> 兼具两种功能,因此可以用作给 actionListener 属性类的方法传递数据。
-  <a4j:actionparam> 既可以给 <a4j:commandButton> 和 <a4j:commandLink> 传递参数,也可以给 <a4j:support> 传递参数。
6.       使用 <a4j:repeat>
1)  <a4j:repeat> 与 <h:dataTable> 很相似,用法也接近。不同点在于 Ajax Request 之后 <a4j:repeat> 可以只刷新选中的行或列,而不必刷新整个表格。
2)  <a4j:repeat> 的体可以包含多种代码,从 JSF 控件到 HTML ,不一而足。
3)  使用 ajaxKeys 属性对选中列或行进行部分刷新
【注意】通过 reRender 刷新的控件,必须确保它能生成一些标记 markup ;如果组件不生成任何 markup 或者 rendered 设为 false ,则应该将其置于 PlaceHolder 中,比如 <h:panelGrid> 或者 <a4j:outputPanel> 。
-  基本属性:
     value 、 var 与 <h:dataTable> 相同;
     rowKeyVar 代表行号的变量名, String 类型。
-  ajaxKeys 属性,指向一个 java.util.Set 对象,其中包含着需要被刷新的行号,从 0 开始计数,接受 EL 表达式;
-  每一行里引发 Ajax Request 的控件的 reRender 属性决定哪些列要被刷新;而 ajaxKeys 决定哪些行要被更新。这两个属性精确定位了需要刷新的"单元格",从而实现页面的部分刷新。

7.       使用 <a4j:status>

1)  <a4j:status> 可以用来显示 Ajax Request 发送和结束的状态。
2)  可以引发 Ajax Request 的那四个 <a4j> 控件都可以通过' status '属性来指定 <a4j:status> 控件。
3)  <a4j:status> 也可以被指定给 Region 。
4)  <a4j:status> 的主要属性:
-  startText 和 stopText
-  <f:facet name="start"> 和 <f:facet name="stop"> ,任何 JSF 控件都可以加进来,包括 GraphicImage
5)  将 Status 指定给 Region
-  无需特别操作,只将 <a4j:status> 放在 Region 内即可;
-  <a4j:status> 只为所在的 Region 服务,所在 Region 内部或外部的 Region 都不服务;
-  <a4j:status> 也可以用其自身的 left 、 top 等属性精确定位。


8.       使用 <a4j:include> 和 <a4j:keepAlive>

1)  可以使用 <a4j:include> 在父 View 中包含子 View ,而子 View 仍然可以像正常 JSF 一样,按照导航规则导航。通常用来做向导之类的页面。

2)  <a4j:include viewId="/step1.xhtml"/> 可以被放置于页面的任何位置。
【注意】 viewId 属性应该以" / "开头。

3)  在 faces-config.xml 中为子 View 定义导航规则, <from-view-id> 应该是子 View 的 view id 。

4)  使用 <a4j:keepAlive>
-  可以使 requestScope 的 bean 的生命长于 request 而又短于 Session ;
-  name 属性指向 managed bean 的名字,而不是 EL 表达式;
-  原理在于, name 属性所指向的 bean ,在页面 render 之前被存储;当下一个 Request 到来时, bean 又被倒回 request ,而其之前的值仍然可用。
-  默认情况下, <a4j:keepAlive> 也可以为非 Ajax 请求服务;要想限制其只为 Ajax Request 服务,则要将其 ajaxOnly 属性设为 true 。


9.       使用 <a4j:jsFunction>

1)  <a4j:jsFunction> 与其他四种可以引发 Ajax Request 的控件非常相似;不同点在于 <a4j:commandButton> 、 <a4j:support> 是通过 DHTML event 引发 Ajax Request ,而 <a4j:jsFunction> 是通过自定义的 JavaScript 函数来引发 Ajax Request 。当自定义 JavaScript 函数被调用的时候, Ajax Request 被引发。
2)  <a4j:jsFunction> 也包含 action 、 actionListener 、 reRender 等属性,也可以包含 <f:param> 或 <a4j:actionparam> 。
3)  <a4j:jsFunction> 也可以像 <a4j:commandButton> 一样作为独立控件使用,而不是像 <a4j:support> 一样。


10.   使用 <a4j:ajaxListener>

1)  该 Listener 只在 Render Response 阶段被调用,因此它总是会被调用到,不会被跳过。
2)  该 Listener 只为 Ajax Request 所调用。
3)  通常用来检查或设置需要被 render 的控件。

分享到:
评论

相关推荐

    pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.002)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于ssm框架+mysql+jsp实现的监考安排与查询系统

    有学生和教师两种角色 登录和注册模块 考场信息模块 考试信息模块 点我收藏 功能 监考安排模块 考场类型模块 系统公告模块 个人中心模块: 1、修改个人信息,可以上传图片 2、我的收藏列表 账号管理模块 服务模块 eclipse或者idea 均可以运行 jdk1.8 apache-maven-3.6 mysql5.7及以上 tomcat 8.0及以上版本

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.001)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于MATLAB车牌识别代码实现代码【含界面GUI】.zip

    matlab

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于Web的毕业设计选题系统的设计与实现(springboot+vue+mysql+说明文档).zip

    随着高等教育的普及和毕业设计的日益重要,为了方便教师、学生和管理员进行毕业设计的选题和管理,我们开发了这款基于Web的毕业设计选题系统。 该系统主要包括教师管理、院系管理、学生管理等多个模块。在教师管理模块中,管理员可以新增、删除教师信息,并查看教师的详细资料,方便进行教师资源的分配和管理。院系管理模块则允许管理员对各个院系的信息进行管理和维护,确保信息的准确性和完整性。 学生管理模块是系统的核心之一,它提供了学生选题、任务书管理、开题报告管理、开题成绩管理等功能。学生可以在此模块中进行毕业设计的选题,并上传任务书和开题报告,管理员和教师则可以对学生的报告进行审阅和评分。 此外,系统还具备课题分类管理和课题信息管理功能,方便对毕业设计课题进行分类和归档,提高管理效率。在线留言功能则为学生、教师和管理员提供了一个交流互动的平台,可以就毕业设计相关问题进行讨论和解答。 整个系统设计简洁明了,操作便捷,大大提高了毕业设计的选题和管理效率,为高等教育的发展做出了积极贡献。

    机器学习(预测模型):2000年至2015年期间193个国家的预期寿命和相关健康因素的数据

    这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    婚恋网站 SSM毕业设计 附带论文.zip

    婚恋网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    基于java的戒烟网站答辩PPT.pptx

    基于java的戒烟网站答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    机器学习(预测模型):自行车共享使用情况的数据集

    Capital Bikeshare 数据集是一个包含从2020年5月到2024年8月的自行车共享使用情况的数据集。这个数据集记录了华盛顿特区Capital Bikeshare项目中自行车的租赁模式,包括了骑行的持续时间、开始和结束日期时间、起始和结束站点、使用的自行车编号、用户类型(注册会员或临时用户)等信息。这些数据可以帮助分析和预测自行车共享系统的需求模式,以及了解用户行为和偏好。 数据集的特点包括: 时间范围:覆盖了四年多的时间,提供了长期的数据观察。 细节丰富:包含了每次骑行的详细信息,如日期、时间、天气条件、季节等,有助于深入分析。 用户分类:数据中区分了注册用户和临时用户,可以分析不同用户群体的使用习惯。 天气和季节因素:包含了天气情况和季节信息,可以研究这些因素对骑行需求的影响。 通过分析这个数据集,可以得出关于自行车共享使用模式的多种见解,比如一天中不同时间段的使用高峰、不同天气条件下的使用差异、季节性变化对骑行需求的影响等。这些信息对于城市规划者、交通管理者以及自行车共享服务提供商来说都是非常宝贵的,可以帮助他们优化服务、提高效率和满足用户需求。同时,这个数据集也

Global site tag (gtag.js) - Google Analytics