在本文中,我们将讲述在现有的JSF2应用程序中使用RichFaces 3.3.3+的有关问题的解决的方法。在开始你的迁移前,请注意了,因为支持JSF2的应用仅能使用3.3.x的版本,这可能会影响到你的迁移计划。如果要完全支持JSF2,我们推荐你使用RichFaces 4.0.0版本,不过,它仍然在开发过程中。
项目设置
1、 首先,我们需要添加库到项目
a) 到RichFaces-project站点的下载栏目下载RichFaces 3.3.3Final 二进制包
b) 在libs文件夹中用新的替换旧的richfaces-*库
i. 有两个richfaces-impl jar文件包
ii. 只需增加richfaces-impl-jsf2 jar包
2、 在web.xml中使用下面的context-param去掉VDL viewhandler
<context-param> <param-name>javax.faces.DISABLE_FACELET_JSF_VIEWHANDLER</param-name> <param-value>true</param-value> </context-param> |
如果你想看一个使用这种方式配置的示例应用程序,点此下载richfaces-demo-jsf2。
Photoalbum实例(运行于AS6中)
关于运行在Jboss AS 6中的JSF2应用-photo album的介绍,请看Deploying Photo Album Example to JBoss AS 6 with JSF 2
限制清单
我们认为3.3.3版是RichFace开始支持JSF2的第一步,这里需要作出一个权衡,是使用不完全支持JSF2.0的3.3.x,还是4.0,真正完全支持JSF2.0的是RichFaces4.0,这也是我们不懈努力要推出4.0的一个原因
更多关于RichFaces JSF 2.0 的信息,请看博客JSF 2.0 Roadmap For RichFaces
RichFaces3.3.3不支持用facelets(VDL)构建的JSF2
RichFaces的标记处理类仍然依赖于Facelets1.1.15
JSF2 native ajax问题
F:ajax
RichFaces3.3.3不支持VDL,所以它不支持任何新的标记,比如f:ajax,h:outputScript等,你应该继续使用RichFaces相应的标记来代替。
JSF ajax javascript api
由于针对AJAX删除的组件,JSF2不提供清除脚本对象的机制,通过JSF native ajax更新组件时,可能会导致内存泄露。如果你碰到内存问题,很可能因此引起。
JSR-303支持
当运行在兼容模式时(VDL关闭而扩展facelets被使用),JSF2不会注册BEAN验证器。这不是RichFaces3.3.3的限制引起的,而是移植到JSF2时应该被考虑的。
注释扫描
在初始化JSF2时,ConfigManager检查faces-config存在,然后看是否它的version等于2.0。也就是说,为了在你现有的应用程序中让JSF注释其作用,你应该:
a) 在应用中没有faces-config
b) 或者应用程序配置的version应该改为2.0
运行在GlassFish服务器中
虽然不是RichFaces的一种限制,但是如果把JSF2应用程序部署在GlassFish v3中时,你必须把你的应用程序描述符定义为2.5的版本:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> |
如果不这样的话,在发布时,你可能会看到这样的信息“EJB模块没有发现”。