Weblogic 12.1.2环境下JSF集成RichFaces遇依赖问题求助
解决Weblogic 12.1.2上RichFaces 4.5.x的依赖与配置问题
看起来你之前踩了两个关键坑:用了错误版本的Atmosphere依赖,以及引入了Tomcat/JBoss专属的容器Jar(这些和Weblogic完全不兼容,只会引发冲突)。结合你的环境(Weblogic 12.1.2、JSF 2.0、Java EE 6),我给你一套手动配置的可行方案,不需要Maven:
第一步:清理现有依赖,移除冲突Jar
先把WEB-INF/lib里这些Jar删掉,它们是导致你后续ClassNotFound和容器冲突的根源:
catalina-comet.jar(Tomcat专属,Weblogic不需要)reflections-0.9.6_jboss_errai_r2.jar(JBoss专属,Weblogic不兼容)atmosphere-runtime-1.0.2.jar(版本过低,和RichFaces 4.5.x不匹配)
第二步:添加正确的RichFaces 4.5.17.Final依赖Jar
RichFaces 4.5.x(推荐用最新稳定版4.5.17.Final)需要的核心依赖如下,全部放入WEB-INF/lib:
richfaces-a4j-4.5.17.Final.jarrichfaces-core-4.5.17.Final.jarrichfaces-rich-4.5.17.Final.jarrichfaces-page-fragments-4.5.17.Final.jarcssparser-0.9.18.jarsac-1.3.jarguava-19.0.jar(Weblogic自带的Guava版本可能过低,需要手动添加)atmosphere-runtime-2.3.1.jar(这是RichFaces 4.5.x对应的正确Atmosphere版本,之前的1.x完全不兼容)commons-beanutils-1.9.3.jarcommons-collections-3.2.2.jarcommons-logging-1.2.jar(覆盖Weblogic自带的旧版本commons-logging)
第三步:配置Weblogic类加载优先级(关键!)
Weblogic自带了很多Java EE库,会和你手动添加的Jar产生版本冲突。需要在WEB-INF/weblogic.xml中配置优先加载WEB-INF/lib的Jar,创建或修改该文件如下:
<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> <!-- 如果你不想全局优先,也可以指定具体包优先加载,比如: <prefer-application-packages> <package-name>org.apache.commons.*</package-name> <package-name>com.google.common.*</package-name> <package-name>org.atmosphere.*</package-name> <package-name>org.richfaces.*</package-name> </prefer-application-packages> --> </container-descriptor> <context-root>your-app-name</context-root> </weblogic-web-app>
第四步:配置web.xml中的RichFaces相关组件
确保你的web.xml包含以下配置,支持RichFaces的核心功能和Atmosphere:
<!-- RichFaces Bootstrap Listener --> <listener> <listener-class>org.richfaces.webapp.RichFacesBootstrapListener</listener-class> </listener> <!-- Atmosphere Servlet (RichFaces Ajax推送需要) --> <servlet> <servlet-name>AtmosphereServlet</servlet-name> <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class> <load-on-startup>0</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>AtmosphereServlet</servlet-name> <url-pattern>/atmosphere/*</url-pattern> </servlet-mapping> <!-- 可选:RichFaces皮肤配置 --> <context-param> <param-name>org.richfaces.skin</param-name> <param-value>blueSky</param-value> </context-param> <context-param> <param-name>org.richfaces.enableControlSkinning</param-name> <param-value>true</param-value> </context-param>
第五步:测试简单的RichFaces页面
创建一个测试页面test.xhtml,验证是否能正常运行:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:a="http://richfaces.org/a4j" xmlns:rich="http://richfaces.org/rich"> <h:head> <title>RichFaces Test</title> </h:head> <h:body> <h:form> <rich:panel header="RichFaces Test Panel"> <h:outputText value="Current time: #{testBean.currentTime}" /> <a:commandButton value="Refresh Time" action="#{testBean.refreshTime}" render="@form" /> </rich:panel> </h:form> </h:body> </html>
对应的TestBean(放在你的源码包中):
import java.io.Serializable; import java.util.Date; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; @ManagedBean @ViewScoped public class TestBean implements Serializable { private Date currentTime; public TestBean() { refreshTime(); } public void refreshTime() { this.currentTime = new Date(); } public Date getCurrentTime() { return currentTime; } }
关键注意事项
- 不要引入任何Tomcat/JBoss专属的Jar包,Weblogic有自己的容器实现,这些Jar只会带来冲突。
- Atmosphere版本必须匹配RichFaces 4.5.x,官方指定的是2.3.x系列,不要用1.x版本。
- Weblogic的类加载配置是核心,否则容器自带的旧版本库会覆盖你添加的Jar,导致各种奇怪的错误。
内容的提问来源于stack exchange,提问作者hagrawal7777
相关产品推荐
相关产品推荐

