现象:
用JSF+spring做了一个应用系统,JSF1.2,Richfaces3.3.3,项目部署在weblogic11上没有问题,但是部署weblogic12上,就出现各种问题。
最后经过各种调试发现的规律是:
JSF页面js报错,
JSF页面调用bean中方法调不到,
JSF页面JSF方法、标签不生效、报错
由此怀疑是怀疑JSF1.2与weblogic12有冲突。
解决:
查找资料:
https://docs.oracle.com/middleware/1213/wls/WBAPP/configurejsfandjtsl.htm#WBAPP199
根据官网资料,jsf2.0与weblogic12无缝连接,但是为了向下兼容,jsf1.2部署在weblogic12上需要一些配置。详见官网资料。
官网提到的配置方式有两种,由于我们的应用中包含了JSF JARs ,所以我们在WebLogic .xml (.war)或WebLogic -application.xml (.ear)中配置一个过滤类加载器,配置内容如下:
<prefer-application-packages>
<package-name>javax.faces.*</package-name>
<package-name>com.sun.faces.*</package-name>
<package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/com.sun.faces.*</resource-name>
</prefer-application-resources>
完整的weblogic.xml内容如下:
<weblogic-web-app
xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<container-descriptor>
<prefer-application-packages>
<package-name>javax.faces.*</package-name>
<package-name>com.sun.faces.*</package-name>
<package-name>com.bea.faces.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>javax.faces.*</resource-name>
<resource-name>com.sun.faces.*</resource-name>
<resource-name>com.bea.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/com.sun.faces.*</resource-name>
</prefer-application-resources>
</container-descriptor>
</weblogic-web-app>
将weblogic.xml与web.xml放在同级目录下,并部署在weblogic12上运行即可。这样配置之后,JSF1.2可以正常使用。