有人请我帮忙解决一个应用程序问题。
下面是背景——我们有一个在WAS 7中运行的JSF 1.2应用程序。这是一场战争。该团队向同一个应用程序添加了另一个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)
我还可以检查什么来确定错误的原因?
这是部分设置问题。EAR类加载器被设置为PARENT_LAST,但WAR类加载器没有。一旦我们在两个地方都设置了PARENT_LAST,它就工作了。
将此作为答案,以便其他有相同问题的人可以从答案中找到修复它的方法,而不必阅读评论。
如果不符合礼仪,可以删除