java.lang.NoSuchMethodError: org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String

java.lang.NoSuchMethodError: org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String

我在尝试将 p:menuitem 添加到菜单时遇到问题。下面的代码是一个菜单栏的文件,会被其他网页收录。

<ui:composition 
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ps="http://primefaces.org/spark"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">

<h:outputStylesheet name="css/spark-layout-blue.css" library="spark-layout" />

<h:form>  
    <ps:menu id="layout-menu">
        <p:submenu label="Opções" >  
            <p:menuitem />
        </p:submenu>  
    </ps:menu>
</h:form>


不管我在 p:menuitem 中放什么,当我尝试 运行 时,我得到这个:

HTTP Status 500 - org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String;

type Exception report

message org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String;

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String;
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
    org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.lang.NoSuchMethodError: org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String;
    org.primefaces.spark.component.menu.SparkMenuRenderer.encodeElement(SparkMenuRenderer.java:87)
    org.primefaces.spark.component.menu.SparkMenuRenderer.encodeElements(SparkMenuRenderer.java:77)
    org.primefaces.spark.component.menu.SparkMenuRenderer.encodeSubmenu(SparkMenuRenderer.java:264)
    org.primefaces.spark.component.menu.SparkMenuRenderer.encodeElement(SparkMenuRenderer.java:115)
    org.primefaces.spark.component.menu.SparkMenuRenderer.encodeElements(SparkMenuRenderer.java:77)
    org.primefaces.spark.component.menu.SparkMenuRenderer.encodeMarkup(SparkMenuRenderer.java:59)
    org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:105)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1896)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:451)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:70)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

如果我摘下 p:menuitem,它 运行 就正常了。

有什么帮助吗?

java.lang.NoSuchMethodError: org.primefaces.model.menu.MenuItem.getClientId()Ljava/lang/String;

该方法是运行时类路径中的 added in PrimeFaces 5.0. This problem thus implies that you're having an older PrimeFaces 版本,与 Spark 不兼容。升级吧。