我认为我被想法困住了。我正在尝试将liferay portlet 从weblogic 移到WAS 8。在weblogic 上,我一直在使用JSF 2.0 的mojorra 实现和primefaces 作为组件库。我已经在 WAS 上安装了 primefaces,当我试图移动 portlet 时,问题开始出现。
第一个问题是 WAS 不断尝试使用 myfaces 作为 JSF 实现——我知道这一点是因为 myfaces 抛出异常:
引起:java.lang.IllegalArgumentException: factoryName'javax.faces.view.facelets.FaceletCacheFactory' at javax.faces.FactoryFinder.checkFactoryName(FactoryFinder.java:383)
我在 maven pom.xml 文件中有以下依赖项:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.2</version>
</dependency>
对于 WAS 应用程序,我将类加载器设置为首先加载我的类。但这没有帮助。为了确保我为服务器配置了新的类加载器 - 但情况再次重复。我的最后一个想法是将 mojarra jar 定义为共享库 - 但后来我得到了 ClassFormatException (我没有时间研究它)。
有任何想法吗?
在将 mojorra 类添加到 WAR 并更改类加载器后,我遇到了异常:
[7/17/12 18:52:25:072 CEST] 0000002c config E 部署期间出现严重错误:com.sun.faces.config.ConfigurationException:配置失败!com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:375) 上的 factoryName 'javax.faces.view.facelets.FaceletCacheFactory' com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225)在 com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1649) 在 com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:410)
我跟踪了异常,发现只有 myfaces 实现中的 factoryfinder 可能我应该在已经存在的项目之外添加其他依赖项(jsf-api,jsf-impl)?
在将 jsf 库指定为共享库并将它们作为对我的战争的引用之后 - 初始化成功而没有任何错误 - 另一个问题是现在 liferay 正在抛出异常:
01:21:16,956 错误 [LiferayFacesContext:61] 实例未初始化——调用者可能是静态的 01:21:16,960 错误 [LiferayLocalePhaseListener:87] java.lang.NullPointerException at com.liferay.faces.portal.lifecycle.LiferayLocalePhaseListener.setLocale (LiferayLocalePhaseListener.java:67)
也许是因为我还应该将 liferay 库定义为共享库——我会在几秒钟内尝试。
以下例外是:
引起:com.liferay.faces.bridge.renderkit.html_basic.HeadRendererBridgeImpl.encodeBegin 的 java.lang.NullPointerException (HeadRendererBridgeImpl.java:133)
不知道这两个异常是否相互关联 - 但结果是我的 portlet 无法工作:(