- 浏览: 147773 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (87)
- seam/jsf (22)
- java (24)
- spring (6)
- hibernate (2)
- Mysql (4)
- web (1)
- JMS (0)
- 计算机(computer) (1)
- linux (3)
- eclipse (4)
- Javascript (1)
- xstream (3)
- JPA (2)
- 汇编 (1)
- HttpClient (1)
- quartz (1)
- J2EE (2)
- EJB (1)
- restful web (1)
- maven (1)
- TTServer (3)
- restlet (0)
- jquery (0)
- Firebug (0)
- jquery Masonry+Infinite-Scroll (0)
- JACOB (0)
- elasticsearch (0)
最新评论
-
tuspark:
关于ApplicationContextAware的详细介绍, ...
ApplicationContextAware -
hc_face:
应该是 环境被初始化的时候,bean 也一并被初始化吧。先后顺 ...
ApplicationContextAware -
奇林醉:
有点明白了
Collections.unmodifiableList() -
tcking:
HashSet不关心迭代的次序,也就是说下一次的迭代次序可能就 ...
HashSet LinkedHashSet TreeSet -
yzhw:
我要去试试
seam前端提速
1.
<!-- [endif]-->用队列控制 Event Traffic
<!-- [if !supportLists]-->1) <!-- [endif]-->以下两个属性用来避免由频繁的 DHTML 事件所引发大量的 request 请求。
· eventsQueue
· requestDelay
<!-- [if !supportLists]-->2) <!-- [endif]-->对于能够引发 Ajax Request 的 4 种控件来说,以上两种属性都是可用的。
<!-- [if !supportLists]-->3) <!-- [endif]-->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 清除掉。
<!-- [if !supportLists]-->4) <!-- [endif]-->requestDelay 属性
· 单位毫秒 ms ,用来定义 Request 被发送出去之前,需要在队列里强制等待的时间。即使前面一个 Request 都没有,也必须老老实实等着到点。
· 可以将 eventsQueue 和 requestDelay 一起使用。
<!-- [if !supportLists]-->5) <!-- [endif]-->ignoreDupResponse 属性
· 将此属性设为 true ,则当同一控件发出新的 Request 的时候,当前的 Response 将被 Ajax 忽略掉。
注意,之前的 Request 在 Server 上已经被处理,只是 Response 在 Client 上被忽略掉了。
· eventsQueue 和 ignoreDupResponse 的区别在于:
前者的 Response 总是会被 Client 处理,然后队列中的 Request 才被发出,属于“先来后到”;而对于后者来说,一旦发现同一控件又有了新的 Request ,则立即抛弃现有的 Response ,属于“喜新厌旧”。
· 如果设置了 ignoreDupResponse 而没有设置 eventsQueue ,则系统会根据控件的 ID 创建一个默认的事件队列。
<!-- [if !supportLists]-->2. <!-- [endif]-->JavaScript 交互
<!-- [if !supportLists]-->1) <!-- [endif]-->调用自定义的 JavaScript 函数
尽管使用 RichFaces 时不用写 JavaScript ,但 RichFaces 仍然允许你调用自定义的 JavaScript 函数。
· onsubmit :仅当 Ajax Request 被发送之前;
· onbeforedomupdate :仅当 DOM 更新被处理之前;
· oncomplete : 当 DOM 更新被处理完毕之后。
<!-- [if !supportLists]-->2) <!-- [endif]-->data 属性
· 可以从 Server 上得到任何额外的数据,可以通过 EL 表达式简单地将 data 属性指向 bean property ,然后数据将会按照 JSON 的格式串行化到客户端。比如:
<a4j:commandButton value="Submit" reRender="out"
data="#{bean.text}" oncomplete="alert(data)"/>
· 除了基础类型,其他可以被串行化的复杂类型(数组、集合),也可以加入 JSON 格式。
<!-- [if !supportLists]-->3. <!-- [endif]-->性能方面的考虑
<!-- [if !supportLists]-->1) <!-- [endif]-->使用 eventsQueue 和 requestDelay
<!-- [if !supportLists]-->2) <!-- [endif]-->使用 bypassUpdate 属性
当此属性设为 true 的时候, Update Model 和 Invoke Application 阶段将会被跳过,从而缩短响应时间。通常用在表单验证上。
<!-- [if !supportLists]-->3) <!-- [endif]-->使用 <a4j:region>
· 当 renderRegionOnly 属性被设为 true 时, Browser 将只刷新当前 Region ,也就是发出 Ajax Request 的 Region 。对于 Region 以外的, Partial-Page 刷新将不会被处理。
· 当 renderRegionOnly 属性被设为 true 时,只有同时 满足以下两点的部分会被刷新:
控件必须在引发 Ajax Request 的 Region 里;
被设置为需要刷新(在当前 Region 的其他控件的 reRender 里或者在 <a4j:outputPanel ajaxRendered=”true”> 里)。
其他的部分一概不会被刷新。
· selfRendered 属性
<!-- [if !supportLists]-->4. <!-- [endif]-->验证用户输入(实例)
<!-- [if !supportLists]-->1) <!-- [endif]-->使用 <a4j:region> 或者 ajaxSingle 属性来限制 process 的 Region ,以避免控件间相互干扰。
<!-- [if !supportLists]-->2) <!-- [endif]-->使用 <rich:message> 来显示错误信息。
<!-- [if !supportLists]-->3) <!-- [endif]-->使用 <a4j:region> 以及 renderRegionOnly 属性,而不是 ajaxSingle ,来避免错误信息被其他控件的单独 process 而被清除掉。
<!-- [if !supportLists]-->4) <!-- [endif]-->使用 bypassUpdate 属性来跳过 Update Model 和 Invoke Application 阶段。
<!-- [if !supportLists]-->5. <!-- [endif]-->使用 <a4j:actionparam>
<!-- [if !supportLists]-->1) <!-- [endif]--><a4j:actionparam> 可以被认为是 <f:param> 和 <f:actionListener> 的组合:
· <f:param> - 在 request 中传递参数;
· <f:actionListener> - 设置 Bean property 的值。
<!-- [if !supportLists]-->2) <!-- [endif]-->与 <f:setPropertyActionListener> 非常相似:
· value 对应 value ;
· assignTo 对应 target ;
· name 、 converter 没有对应。
【注意】因为需要向 request 传递参数,因此 name 属性一定不能少。
<!-- [if !supportLists]-->3) <!-- [endif]-->不同点:
· <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> 传递参数。
<!-- [if !supportLists]-->6. <!-- [endif]-->使用 <a4j:repeat>
<!-- [if !supportLists]-->1) <!-- [endif]--><a4j:repeat> 与 <h:dataTable> 很相似,用法也接近。不同点在于 Ajax Request 之后 <a4j:repeat> 可以只刷新选中的行或列,而不必刷新整个表格。
<!-- [if !supportLists]-->2) <!-- [endif]--><a4j:repeat> 的体可以包含多种代码,从 JSF 控件到 HTML ,不一而足。
<!-- [if !supportLists]-->3) <!-- [endif]-->使用 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 决定哪些行要被更新。这两个属性精确定位了需要刷新的“单元格”,从而实现页面的部分刷新。
<rich:panel header="a4j:repeat Test">
<table>
<a4j:repeat value="#{nameListBean.nameList}" var="name"
rowKeyVar="rowNo" ajaxKeys="#{nameListBean.rowsToUpdate}">
<tr>
<td>
<h:outputText value="#{rowNo}"></h:outputText>
</td>
<td>
<h:outputText id="fullName" value="#{name.fullName}"></h:outputText>
</td>
<td>
<h:inputText id="firstName" value="#{name.firstName}">
<a4j:support event="onblur"
actionListener="#{nameListBean.refreshRowsToUpdate}"
reRender="fullName">
<a4j:actionparam name="rowNo" value="#{rowNo}"
assignTo="#{nameListBean.currentRow}"/>
</a4j:support>
</h:inputText>
</td>
<td>
<h:inputText id="lasttName" value="#{name.lastName}">
<a4j:support event="onblur"
actionListener="#{nameListBean.refreshRowsToUpdate}"
reRender="fullName">
<a4j:actionparam name="rowNo" value="#{rowNo}"
assignTo="#{nameListBean.currentRow}"/>
</a4j:support>
</h:inputText>
</td>
</tr>
</a4j:repeat>
</table>
</rich:panel>
<!-- [if !supportLists]-->7. <!-- [endif]-->使用 <a4j:status>
<!-- [if !supportLists]-->1) <!-- [endif]--><a4j:status> 可以用来显示 Ajax Request 发送和结束的状态。
<!-- [if !supportLists]-->2) <!-- [endif]-->可以引发 Ajax Request 的那四个 <a4j> 控件都可以通过‘ status ’属性来指定 <a4j:status> 控件。
<!-- [if !supportLists]-->3) <!-- [endif]--><a4j:status> 也可以被指定给 Region 。
<!-- [if !supportLists]-->4) <!-- [endif]--><a4j:status> 的主要属性:
· startText 和 stopText
· <f:facet name=”start”> 和 <f:facet name=”stop”> ,任何 JSF 控件都可以加进来,包括 GraphicImage
<!-- [if !supportLists]-->5) <!-- [endif]-->将 Status 指定给 Region
· 无需特别操作,只将 <a4j:status> 放在 Region 内即可;
· <a4j:status> 只为所在的 Region 服务,所在 Region 内部或外部的 Region 都不服务;
· <a4j:status> 也可以用其自身的 left 、 top 等属性精确定位。
<!-- [if !supportLists]-->8. <!-- [endif]-->使用 <a4j:include> 和 <a4j:keepAlive>
<!-- [if !supportLists]-->1) <!-- [endif]-->可以使用 <a4j:include> 在父 View 中包含子 View ,而子 View 仍然可以像正常 JSF 一样,按照导航规则导航。通常用来做向导之类的页面。
<!-- [if !supportLists]-->2) <!-- [endif]--><a4j:include viewId="/step1.xhtml"/> 可以被放置于页面的任何位置。
【注意】 viewId 属性应该以“ / ”开头。
<!-- [if !supportLists]-->3) <!-- [endif]-->在 faces-config.xml 中为子 View 定义导航规则, <from-view-id> 应该是子 View 的 view id 。
<!-- [if !supportLists]-->4) <!-- [endif]-->使用 <a4j:keepAlive>
· 可以使 requestScope 的 bean 的生命长于 request 而又短于 Session ;
· name 属性指向 managed bean 的名字,而不是 EL 表达式;
· 原理在于, name 属性所指向的 bean ,在页面 render 之前被存储;当下一个 Request 到来时, bean 又被倒回 request ,而其之前的值仍然可用。
· 默认情况下, <a4j:keepAlive> 也可以为非 Ajax 请求服务;要想限制其只为 Ajax Request 服务,则要将其 ajaxOnly 属性设为 true 。
<!-- [if !supportLists]-->9. <!-- [endif]-->使用 <a4j:jsFunction>
<!-- [if !supportLists]-->1) <!-- [endif]--><a4j:jsFunction> 与其他四种可以引发 Ajax Request 的控件非常相似;不同点在于 <a4j:commandButton> 、 <a4j:support> 是通过 DHTML event 引发 Ajax Request ,而 <a4j:jsFunction> 是通过自定义的 JavaScript 函数来引发 Ajax Request 。当自定义 JavaScript 函数被调用的时候, Ajax Request 被引发。
<!-- [if !supportLists]-->2) <!-- [endif]--><a4j:jsFunction> 也包含 action 、 actionListener 、 reRender 等属性,也可以包含 <f:param> 或 <a4j:actionparam> 。
<!-- [if !supportLists]-->3) <!-- [endif]--><a4j:jsFunction> 也可以像 <a4j:commandButton> 一样作为独立控件使用,而不是像 <a4j:support> 一样。
<!-- [if !supportLists]-->10. <!-- [endif]-->使用 <a4j:ajaxListener>
<!-- [if !supportLists]-->1) <!-- [endif]-->该 Listener 只在 Render Response 阶段被调用,因此它总是会被调用到,不会被跳过。
<!-- [if !supportLists]-->2) <!-- [endif]-->该 Listener 只为 Ajax Request 所调用。
<!-- [if !supportLists]-->3) <!-- [endif]-->通常用来检查或设置需要被 render 的控件
发表评论
-
seam前端提速
2010-09-08 13:11 1344Seam使用了richfaces做为jsf ... -
seam topic
2010-08-25 16:58 2178Forum: Seam Users Forum ListTop ... -
maven 中使用jetty 改端口号
2010-08-04 13:52 1370jetty 使用时,如果出现 address already ... -
seam空格
2010-07-23 09:59 683seam空格:&nbps;没用 ,要使用 ... -
null value seam
2010-07-23 09:33 508因为给model添加一个double类型的字段(数据库已有一些 ... -
Seam el 中使用 map
2010-06-29 15:23 1255一直以为在el里不能用map,今天发现原来可以... @na ... -
seam pdf The document has no pages
2010-06-28 13:31 1734用seam 中的pdf功能时 出现The document h ... -
JSF多对多增加
2010-06-25 17:04 889多对多关系时 person (n-n) work (perso ... -
JSF Chapter04
2010-06-24 13:18 1492. 用队列控制 Event Traffic ... -
JSF Chapter11
2010-06-24 13:14 8291. 使用内建的 Skins 1) 基 ... -
JSF Chapter10
2010-06-24 13:13 1158. <rich:scrollableDataT ... -
JSF Chapter09
2010-06-24 11:35 9881. <rich:dropDownM ... -
JSF Chapter08
2010-06-24 11:34 12791. <rich:pickList> ... -
JSF Chapter07
2010-06-24 11:34 15621. 常用的 dataTable 类的控件有: l ... -
JSF Chapter06
2010-06-24 11:20 1710. <rich:panel> 1) ... -
JSF Chapter05
2010-06-24 11:18 16451. a4j: 提供了页面级的 Ajax 支持,也 ... -
JSF Chapter03
2010-06-24 11:14 1460本章主要包括三方面内 ... -
JSF Chapter02
2010-06-24 11:13 9241. 配置 RichFaces 1) ... -
JSF Chapter01
2010-06-24 11:12 8991. JSF’s View = UICompone ... -
Property '****' is not writable on type
2010-04-28 22:20 1078再用seam+jsf开发的时候冒出:***Edit.xhtml ...
相关推荐
本例子演示了。jsf常用控件的例子。很好的。包括jsf大部分控件
JSF日历控件
jsf 控件速查手册,html格式。jsf标签使用培训教程。新手速查教程!
jsf控件的详细说明,内涵2个word文档,说明非常详细,适用,开发必备。
JSF2.xdatatable分页控件与左侧菜单最简单应用 JSF2.x,功能强大,使用方便。全世界使用JSF的人越来越多。而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能...
jsf 控件的说明,很实用
commons-beanutils-1.6.jar commons-collections-3.1.jar jsf-api.jar jsf-impl.jar standard.jar
jsf控件速查手册jsf控件速查手册jsf控件速查手册jsf控件速查手册
一个纯JSF1.2写的日历组件,想了解JSF组件编写的可以用来参考
java server face动态创建表单控件实例
JSF2.xdatatable分页控件与左侧菜单最简单应用 JSF2.x,功能强大,使用方便。全世界使用JSF的人越来越多。而且也有很多很好的控件给发出来了,如:richfaces、primefaces、myfaces等,就日前来讲primefaces功能...
本文档将针对BIMP平台使用到的常见JSF Facelets标签集合进行阐述,供开发者日常开发工作期间参考。BIMP主要采用JSF(Facelets)前端组件技术实施Web 2.0,以提升用户体验,并达到快速、高质量实施产品或项目研发目的...
JSF分页控件 ,支持大容量可查询分页 具体的分页可继承PagerBean
jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF
jsf 分页 jsf 分页 jsf 分页 jsf 分页
JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...
NULL 博文链接:https://animalfishyu.iteye.com/blog/501070
JSF中文教程JSF中文教程JSF中文教程JSF中文教程
《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF学习书《JSF_实战》非常好的JSF...