【发布时间】:2013-06-03 23:48:43
【问题描述】:
有人要求我帮助解决应用程序问题。
这里是背景——我们有一个在 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)
我还可以检查什么来确定错误的原因?
【问题讨论】:
-
该方法是在 JSF 2.0 中添加的,而在 JSF 1.2 中不存在。因此,这表明实际上使用的是 JSF 1.2 而不是 JSF 2.0。
-
谢谢。这是部分设置问题。 EAR 类加载器设置为 PARENT_LAST,但 WAR 类加载器没有。一旦我们在这两个地方都设置了 PARENT_LAST,它就起作用了。所以我现在的新问题是 - EAR 级别设置和 WAR 级别设置有什么区别?还是我应该为此提出一个新问题?
标签: jsf-2 primefaces websphere-7 application.xml