0

我被要求帮助解决应用程序问题。

这是背景 - 我们有一个在 WAS 7 中运行的 JSF 1.2 应用程序。这是一个 WAR。该团队向同一个应用程序添加了另一个 WAR,它是一个 JSF 2.0 模块并使用 PrimeFaces 组件库。因此它是 JSF 1.2 和 JSF 2.0 的组合。因为 WAS 7 中没有对 JSF 2.0 的原生支持,所以我们将 mojarra jar 添加到第二次战争的 WEB-INF/lib 中,并将应用程序类加载器设置为 PARENT_LAST。

我观察到的另一件事是,该团队以这样一种方式定义了他们的应用程序:在 application.xml 中 EAR 的显示名称和 JSF 2.0 WAR 的上下文根值完全相同。我知道为了清楚起见不应该这样做,但找不到任何可以澄清它的东西。

尝试从 JSF 2.0 WAR 中获取页面时,应用程序出现以下错误。我将只添加几行堆栈跟踪

Exception created : java.lang.NoSuchMethodError: javax/faces/context/FacesContext.getAttributes()Ljava/util/Map;
at org.primefaces.lifecycle.RestoreViewPhaseListener.afterPhase(RestoreViewPhaseListener.java:30)
at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)

我还可以检查什么来确定错误的原因?

4

1 回答 1

1

这是部分设置问题。EAR 类加载器设置为 PARENT_LAST,但 WAR 类加载器没有。一旦我们在这两个地方都设置了 PARENT_LAST,它就起作用了。

将此作为答案,以便其他有相同问题的人可以从答案中找到解决问题的方法,而不必阅读评论。

如果这是不礼貌的礼仪,可以删除。

于 2013-06-06T21:48:38.577 回答