java.lang.NoSuchMethodError: javax.faces.component.UICompone



在迁移到JSF 2.2之后,我得到了以下异常。具体来说,我将Mojarra 2.1.17升级到Mojarra 2.2.8。

java.lang.NoSuchMethodError: javax.faces.component.UIComponent.getPassThroughAttributes(Z)Ljava/util/Map;
    at org.primefaces.renderkit.RendererUtils.renderPassThroughAttributes(RendererUtils.java:79)
    at org.primefaces.renderkit.CoreRenderer.renderDynamicPassThruAttributes(CoreRenderer.java:119)
    at org.primefaces.renderkit.CoreRenderer.renderPassThruAttributes(CoreRenderer.java:114)
    at org.primefaces.renderkit.BodyRenderer.encodeBegin(BodyRenderer.java:44)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:823)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1611)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)

当我检查jsf-api-2.2.8.jar里面的UIComponent时,我可以看到有一个方法Map<String, Object> getPassThroughAttributes(boolean create);

这是如何引起的,我该如何解决?

该方法是在JSF 2.2中引入的。因此,当web应用程序的运行时类路径被多个不同版本的JSF API库污染时,就会出现这个问题。换句话说,在运行时类路径中仍然有JSF 2.0或2.1 API。

这表明你正在尝试通过手动将JSF捆绑在webapp中并将其部署到已经捆绑JSF的Java EE容器(如WildFly、JBoss as、GlassFish、WebLogic、WebSphere等)来升级JSF。您的堆栈跟踪太短,以便能够确认,但您的问题历史记录确认您正在使用WebLogic。

为了在WebLogic中正确升级Mojarra,您实际上应该替换/wlserver/modules文件夹中的JSF JAR。


如果您实际使用的是一个没有捆绑JSF的准系统servlet容器,比如Tomcat,那么您需要验证/WEB-INF/lib(或者Maven中的pom文件)在JSF API中是否没有重复项。最常见的初学者的错误是有一个javaee-api.jar在那里。应该将其删除(或设置为provided)。参见a.o.如何导入javax. xml文件。我的Eclipse项目中的servlet API ?

相关内容

最新更新