java.lang.NoSuchMethodError: javax.faces.component.UIComponent.getPassThroughAttributes(Z)Ljava/util/Map;迁移到 JSF 2.2 后

2023-12-01

迁移到 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)

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

这是如何引起的以及如何解决?


那个方法是介绍在 JSF 2.2 中。因此,当 web 应用程序的运行时类路径被多个不同版本的 JSF API 库污染时,就会发生此问题。换句话说,运行时类路径中的某处仍然有 JSF 2.0 或 2.1 API。

这表明您正在尝试通过手动将 JSF 捆绑在 Web 应用程序中并将其部署到已将 JSF 捆绑在一起的 Java EE 容器(例如 WildFly、JBoss AS、GlassFish、WebLogic、WebSphere 等)来升级 JSF。时间太短,无法确认这一点,但您的问题历史记录证实您正在使用 WebLogic。

为了在 WebLogic 中正确升级 Mojarra,您实际上应该替换/wlserver/modules folder.


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.NoSuchMethodError: javax.faces.component.UIComponent.getPassThroughAttributes(Z)Ljava/util/Map;迁移到 JSF 2.2 后 的相关文章

随机推荐