一、RichFaces (3.1.x) 技术需?
1.JDK 1.5 或更高版本;
2.支持?JSF 实现Q?
Sun JSF 1.1 RI - 1.2
MyFaces 1.1.1 - 1.1.5
Facelets JSF 1.1.1 - 1.2
3.支持的应用服务器Q?
Apache Tomcat 4.1 - 6.0
IBM WebSphere 5.1 - 6.0
BEA WebLogic 8.1 - 9.0
Oracle AS/OC4J 10.1.3
Resin 3.0
Jetty 5.1.X
Sun Application Server 8 (J2EE 1.4)
Glassfish (J2EE 5)
JBoss 3.2 - 4.0.x
Sybase EAServer 6.0.1
4.支持的浏览器Q?
Internet Explorer 5.5 - 7.0
Firefox 1.5 - 2.0
Opera 8.5 - 9.0
Netscape 7.0
Safari 2.0
二、安装配|?
1.解压下蝲的压~包文gQ复制其中的“richfaces-api-3.1.0.jar”Q?#8220;richfaces-impl-3.1.0.jar”Q?#8220;richfaces-ui-3.1.0.jar”文g到应用程?"WEB-INF/lib" 目录下?
2.d如下内容到应用程?#8220;WEB-INF/web.xml”文g中?
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>blueSky</param-value>
</context-param>
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
3.d如下几行到应用程?JSP 面中: 对于 XHTML 面Q? I、初始化参数Q?lt;context-param>Q? 其它八种预定义的皮肤Q? 其gؓ在应用中使用的皮肤的名字。其值可用一个精(大小写)的字W串做ؓ皮肤名字Q或指向一个字W串属性的 EL 表达式(#{...}Q,?org.richfaces.framework.skin cd的一个属性? 2.org.ajax4jsf.LOGFILE q是一个指向应用程序或容器日志文g?URL Q如果有日志文g的话Q。如果设|了q个参数Q那么日志文件的内容会作ؓ一个调试错误页面在框架QiframeQ窗口中昄? 3.org.ajax4jsf.VIEW_HANDLERS q是一个由逗号分隔的自定义 ViewHandler 实例的序列,用于插入?Handlers 链\上。Handlers 按照l定的顺序被插入?RichFaces viewhandlers 之前。例如,?facelets 应用E序中,q个参数必须包含 com.sun.facelets.FaceletViewHandlerQ来代替?faces-onfig.xml 文g中的声明? 4.org.ajax4jsf.CONTROL_COMPONENTS q是一个逗号分隔的名字序列,用于一个组件作Z个特D的控制情ŞQ例如资源文件加载器Q别名(aliasQbean lg{等。这是一个从 COMPONENT_TYPE 静态属生反得到的一个组件类型。对于这L型组件的~码Ҏ(gu)常常在呈现的 Ajax 响应中被调用Q尽这个组件不在被更新部分中?/p>
5.org.ajax4jsf.ENCRYPT_RESOURCE_DATA Z生成的资源,例如加密生成的数据,它会在资源的 URL 上被~码加密。例如,URL 指向一个由 mediaOutput lg生成的图片,?mediaOutput lg包含一个生成方法的名字Q那么对于一个黑客的d来说Q他很可能创Z个对于Q?JSF baked beans 或其它属性的h。ؓ了避免这LdQ在重要的应用程序中讄q个参数?#8220;true”Q应用于 JRE > 1.4Q? 6.org.ajax4jsf.ENCRYPT_PASSWORD 用于资源数据加密的一个密码。如果没有设|,用一个随机的密码? 7.org.ajax4jsf.COMPRESS_SCRIPT 不允许框枉新格式化 JavaScript 文gQ其不利于调试Q? II、org.ajax4jsf.Filter 初始化参? q是一个指?log4j.xml 配置文g的\径(相对于应用程序上下文Q,log4j.xml 可用于创建每个应用程序的自定义日志信息? 2.enable-cache 启用框架所生成资源QJavaScriptQCSSQimagesQ等{)的缓存。ؓ了调试开发自定义?JavaScript ?Style(css) 目的Q应避免在浏览器中用旧的缓存数据? 3.forceparser 通过一?HTML 语法查器强制解析每一?JSF 面。如果ؓ“false”Q只?Ajax 响应才被语法查器解析且被转换范的 XML。设|ؓ“false”除了提高了性能Q还?Ajax 更新提供视觉的效果? 因ؓ本h现在使用的是 MyfacesQ所以下面列Z有关 Myfaces ?RichFaces 集成的问题: 问题在于 web.xml 文g中所定义的多个不同的qo器之间存在冲H。ؓ了避免这些问题,RichFaces qo器在配置文g中的位置必须被定义在其它qo器之上? 当?MyFaces + Seam Ӟq有其它问题。如果用这个组合,那么应该?<f:view> 标签内部使用 <a4j:page> 标签Q然后再?<a4j:page> 标签中包含其它内容,因ؓ Myfaces 中的 <f:view> 实现存在一些问题? q个问题可能在不久的来被攻克? Updated - d?lt;rich:orderingList /> lg, calendarlgd了locale讄 RichFaces 开发小l发布了 RichFaces 3.1.3.GA. q是自从 3.1.0以后的第一个发布版?包含了一些新的组?也包?.1.1 ?.1.2中的bug 修复),因此q里我想着重介l下主要的改q地? Time Picker RichFaces timepicker 漂亮的地Ҏ(gu)和calendar control集成?- 你可以很Ҏ(gu)的ؓ date, time or date and time 字段提供一个图形输入控?q是很容易用的, 仅仅l定该组件到模型上就可以? 当一个js事g在当前的控g上触发时,<rich:componentControl /> 允许你再另外一个组件上触发一个动? q是非常强大的功?所以可能很隄? 下面我们来看个简单的例子:q里我们有个modal panel (a bit like a css/div based popup), 我们想从面上的其他地方来启动这个panel: <rich:modalPanel id="panel" width="350" height="100"> 不用调用一些js代码? 我们只要再link上面d一个component controller,然后告诉她在什么组件上执行什么动作就可以? <rich:componentControl /> 可以做的不只q些 - 详细情况请参?online demo . Shuttle list q是个很不错的控? 我很赞赏RichFaces guys,当然q也很容易? <rich:column width="18"> </rich:listShuttle> 另外一个类似的lg?orderable list. 使用h也是很简单的 <rich:orderingList value="#{myMusic}" var="album"> <rich:column> <rich:column> </rich:orderingList> RichFaces 已经有组件来昄 menu bar?现在?3.1.3又添加了右键菜单. Big improvements to Portal support (we are just finishing off support for Seam and RichFaces in a portlet) U别Q?初 订阅 Ajax 相关文章和教E的 RSS 提要 样例 ?1. 样例 ?2. Jar 包清?br />
?3. cd ?4. web.xml 配置 ?5. faces-config.xml 配置 fQh 用来引用 JSF 的控Ӟa4j ?rich 用来引用 Ajax4JSF ?RichFaces 控g?br />
先徏?a4j:formQƈ?rich:dataTable 攑֜里面。dataTable 作ؓ数据昄的蝲体?br />
<rich:dataTable id="p" value="#{bean.people}" var="person" width="100%" h?delete 按钮Q它?Action l定?Bean 的方?del()。最奇的地Ҏ(gu)通过 reRender 属性来把动作执行的l果来刷新整?dataTable。这是 richfaces 体现 ajax Ҏ(gu)的地方。当删除一行时Q页面没有感觉刷斎ͼ但表格发生了变化?/p>
<%@ taglib uri="
<%@ taglib uri="
<xmlns:a4j="
<xmlns:rich="
三、web.xml 中的 Richfaces 参数
1.org.richfaces.SKIN
默认|DEFAULT
DEFAULT
plain
emeraldTown
blueSky
wine
japanCherry
ruby
classic
deepMarine
默认|none
默认|none
默认|none
默认|false
默认|random
默认|true
1.log4j-init-file
默认|true
默认|true
四、其?
RichFaces 3.1.3 发布? 相关主要改动介绍如下: from http://in.relation.to/Bloggers/RichFaces313Released
<rich:calendar value="#{flight.departureDate}"
locale="#{locale}"
datePattern="dd/M/yy hh:mm" />
如你看到的一? 她还是完全国际化的呢!
Controlling one component from another
<f:facet name="header">
<h:outputText value="Modal Panel" />
</f:facet>
<h:outputText value="This panel is called using rich:componentControl"/>
</rich:modalPanel>
<h:outputLink value="#">
Show Modal Panel
<rich:componentControl for="panel" attachTo="link" operation="show" event="onclick"/>
</h:outputLink>
<rich:listShuttle sourceValue="#{items.availableItems}"
targetValue="#{items.selectedItems}"
var="item"
sourceCaptionLabel="Available Items"
targetCaptionLabel="Currently Active Items">
<h:graphicImage value="#{item.icon}"/>
</rich:column>
<rich:column>
<h:outputText value="#{item.label}"/>
</rich:column>
注意我们是如何在lists 面板上添加其?rich lg?
Notice how we've embedded other rich components to layout the lists!
Orderable list
<f:facet name="header">
Song Name
</f:facet>
<h:outputText value="#{album.title}"/>
</rich:column>
<f:facet name="header">
Artist Name
</f:facet>
<h:outputText value="#{album.artist.name}" />
</rich:column>
Context sensitive menu
<s:div id="flower">
<h:graphicImage value="flower.jpg"/>
<rich:contextMenu event="oncontextmenu"
attached="true"
submitMode="none">
<rich:menuItem value="Zoom In"
onclick="enlarge();"/>
<rich:menuItem value="Zoom Out"
onclick="decrease();"/>
</rich:contextMenu>
</s:div>
我们d了一个上下文右键菜单?lt;s:div /> ?
There's also
A system for customising how styles are loaded (one big lump, or on demand)
Over 180 bug fixes (see the release notes)
Congratulations to the RichFaces team!
使用 Richfaces/Ajax4Jsf 创徏 Web 应用
文档选项
打印本页
此作为电子邮件发?br />
样例代码
?q光 (zhoujinguang@yahoo.com.cn), 软g工程? 舜联软gU技
2007 q?11 ?30 ?br />
本文要介l如何运?Richfaces/A4J 来构?JSF 应用Q包括如何定义配|文件、控件用等?br />
概念介绍
JSF ?Ajax 概念大家一定不陌生Q二者结合v来衍生出 A4JQAjax4JSFQ。其目的是?Ajax 的功能集成到 JSF lg中去。后?JBoss 收购 A4J 后,又将光成到 RichFaces 中,不但丰富了控件库和还d了新功能。现?RichFaces 已经是一个具?Ajax ?JSF Ҏ(gu)??Web 框架。对开发h员来_只要按照 JSF 的组件规范来l织面Q免M书写或调用庞杂的 JavaScript 代码或库Q就能达到梦寐以求的 Ajax 效果 ---- 可以只更新局部内容而不用刷新整个页面,增强了用户体验?br />
误?Ajax 技术资源中心,q是有关 Ajax ~程模型信息的一站式中心Q包括很多文档、教E、论坛、blog、wiki 和新闅RQ?Ajax 的新信息都能在这里找到?/p>
下面׃D一个简单的例子来说明如何?Richfaces。该例是一个对列表的编辑,实现Ҏ(gu)据的修改/删除/dQ主要用C rich:dataTable 控g。如下图C:
Jar ?br />
开?RichFaces 应用Q除?RichFaces ?Jar 文g外,q需用到 JsfQjakatar-commons 以及 log4j {?Jar 包。本例中用到?RichFaces 的版本ؓ 3.1.0, Jsf 采用 Apache MyFaces 1.1.5。详l?Jar 包列表如下图Q?/p>
cd
JSF 需要把面数据和操作对象化Q通过 component 来封装。这里有两个c,其中 Bean 为控制类Q定义响应用LL钮的事gҎ(gu)Qƈ作ؓq接视图和数据层的桥梁?Person 为数据类Q用来封装页面数据。它们之间关pd见下图:
配置文g
Java ?Web q用一般通过 War 的Ş式发布,其中需?web.xml 作ؓ应用的配|文件。RichFaces 要求在该配置文g中除了通常?JSF Servlet 定义外,再加上一?RichFaces 的过滤器p了。下面是样例配置说明?br />
web.xml 文g
faces-config.xml 文g
按照 JSF 要求Q需要配|?faces-config.xml 文gQ如下图所C:
代码
q里着重介l视?JSP 面的编码。首先申明所需?taglibQ如下:
<%@ taglib uri="
<%@ taglib uri="
<%@ taglib uri="
<%@ taglib uri="
binding="#{bean.table}">
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="name"/>
</rich:column>
<rich:column>
<h:outputText value="agender"/>
</rich:column>
<rich:column>
<h:outputText value="age"/>
</rich:column>
<rich:column>
<h:outputText value="address"/>
</rich:column>
<rich:column>
<h:outputText value="action"/>
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:columnGroup>
<rich:column>
<h:outputText value="#{person.name}"/>
</rich:column>
<rich:column>
<h:outputText value="#{person.agender}"/>
</rich:column>
<rich:column>
<h:inputText id="age" value="#{person.age}"/>
</rich:column>
<rich:column>
<h:outputText value="#{person.address}"/>
</rich:column>
<rich:column>
<a4j:commandLink onclick="checkDel()" value="delete"
action="#{bean.del}" reRender="p">
<a4j:actionparam name="rowIndex" value="#{bean.table.rowIndex}"
assignTo="#{bean.curRow}"/>
</a4j:commandLink>
</rich:column>
</rich:columnGroup>
<f:facet name="footer">
<rich:columnGroup>
<rich:column colspan="5">
<h:outputText value="total is #{bean.table.rowCount} items"/>
</rich:column>
</rich:columnGroup>
</f:facet>
</rich:dataTable>