本文介绍了动态显示p:breadCrumb的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在托管bean中动态创建primefaces面包屑菜单,我发现此在堆栈溢出和primefaces上创建动态菜单的示例。以下是我创建动态菜单的代码

i need to create primefaces bread crumb menu dynamically in managed bean, i found this How to make a primefaces breadcrumb dynamic? example of dynamic menu creation on stack overflow and primefaces. following is my code to create a dynamic menu

public class BreadCrumb  {

private MenuModel model;

public BreadCrumb() {

    createMenu();

}

@PostConstruct
private void createMenu()
{

     model = new DefaultMenuModel();
      // First submenu
    DefaultSubMenu firstSubmenu = new DefaultSubMenu("First Sub Menu");

    DefaultMenuItem item = new DefaultMenuItem("Item1");
    item.setUrl("http://www.primefaces.org");
    item.setIcon("ui-icon-disk");
    firstSubmenu.addElement(item);
    model.addElement(firstSubmenu);


    // Second submenu
    DefaultSubMenu secondSubmenu = new DefaultSubMenu("Second Sub Menu");
    item = new DefaultMenuItem("Item2");
    item.setIcon("ui-icon-disk");
    item.setUrl("http://www.primefaces.org");
    secondSubmenu.addElement(item);
    //third sub menu
    item = new DefaultMenuItem("Item3");
    item.setIcon("ui-icon-close");
    secondSubmenu.addElement(item);
    //forth sub menu
    item = new DefaultMenuItem("Item4");
    item.setIcon("ui-icon-search");
    secondSubmenu.addElement(item);


    model.addElement(secondSubmenu);
}


public MenuModel getModel() {
    return model;
}
}

而我的xhtml是

 <h:form>

<p:breadCrumb model="#{breadCrumbBean.model}">

</p:breadCrumb>


</h:form>

我尝试使用带有大型菜单,菜单和菜单项的模型,但有时我不渲染任何东西,有时会给出例外。对于当前情况,我遇到了此异常。

i tried using model with mega menu, menu and menu item but sometimes i doesn't render anything and sometimes it gives an exception. for current scenario i am getting this exception.

      Error Rendering View[/revdep/breadcrumb.xhtml]: java.lang.ClassCastException: org.primefaces.model.menu.DefaultSubMenu cannot be cast to org.primefaces.model.menu.MenuItem
at org.primefaces.component.breadcrumb.BreadCrumbRenderer.encodeMarkup(BreadCrumbRenderer.java:42) [primefaces-5.2.jar:5.2]
at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:113) [primefaces-5.2.jar:5.2]
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.5-jbossorg-1.jar:2.1.5-SNAPSHOT]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:100) [primefaces-5.2.jar:5.2]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at com.googlecode.webutilities.filters.CompressionFilter.doFilter(CompressionFilter.java:112) [webutilities-0.0.5.jar:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) [spring-orm-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at pk.gov.fbr.insys.base.IRISFilterBean.doFilter(IRISFilterBean.java:105) [classes:]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:489) [jbossweb-7.0.10.Final.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:154) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.10.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.10.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.10.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.10.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.10.Final.jar:]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_33]

我似乎找不到创建动态面包屑的任何解决方案,将不胜感激

i can't seem to find any solution for creating dynamic breadcrumb, any help would be appreciated

推荐答案

,当然,您必须对此进行调整以适应BreadCrumb ...。

As Joffrey Hernandez says, "Of course, you have to adapt this one for BreadCrumb...".

堆栈跟踪:

java.lang.ClassCastException: org.primefaces.model.menu.DefaultSubMenu cannot be cast to org.primefaces.model.menu.MenuItem`

告诉你t不能在< p:breadcrumb> org.primefaces.model.menu.DefaultSubMenu >。

is telling you that you can't use the class org.primefaces.model.menu.DefaultSubMenu in a <p:breadcrumb>.

此外,面包屑是一维结构,因此您不能嵌套元素。

Furthermore, a breadcrumb is an one-dimensional structure, so you can't nest elements.

因此,解决方案是使用 org.primefaces.model.menu.MenuItem 的实现,例如 org.primefaces.model.menu.DefaultMenuItem 而不是 org.primefaces.model.menu.DefaultSubMenu

Therefore, the solution is to use an implementation of org.primefaces.model.menu.MenuItem, like org.primefaces.model.menu.DefaultMenuItem instead of org.primefaces.model.menu.DefaultSubMenu.

例如:

model = new DefaultMenuModel();

DefaultMenuItem item = new DefaultMenuItem("Item1");
item.setIcon("ui-icon-disk");
item.setUrl("http://www.primefaces.org");
model.addElement(item);

item = new DefaultMenuItem("Item2");
item.setIcon("ui-icon-disk");
item.setUrl("http://www.primefaces.org");
model.addElement(item);

item = new DefaultMenuItem("Item3");
item.setIcon("ui-icon-close");
model.addElement(item);

item = new DefaultMenuItem("Item4");
item.setIcon("ui-icon-search");
model.addElement(item);

这篇关于动态显示p:breadCrumb的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-01 13:21