如何获得PrimeFaces的子项DefaultMenuItem

时间:2016-07-25 09:03:05

标签: jsf jsf-2 primefaces

我尝试在bean中构建菜单模型并将其与标记p:menubar

绑定
<p:menubar class="menu" model="#{layoutView.menuModel}" /> 

一切正常,期待一件事。问题是,我将获得以下菜单结构(当然使用菜单模型):

<p:menubar>
     <p:menuitem>
         <h:panelGrid onmouseover="$(this).find('img').attr('src','resources/images/template_2/header/home_hover.png')" onmouseout="$(this).find('img').attr('src','resources/images/template_2/header/home.png')" columns="2">
              <p:graphicImage value="/resources/images/template_2/header/home.png" />
              <h:commandLink actionListener="#{routesService.redirect}"  value="Siema" />
         </h:panelGrid>
     </p:menuitem>
 </p:menubar>
你可以看到。 p:menuitem有子h:panelGrid(这个.xhtml页面有效)。但是我不能通过在bean中构建菜单模型来获得相同的效果

  DefaultMenuItem item = new DefaultMenuItem();
  HtmlPanelGrid panelGrid = new HtmlPanelGrid();
  HtmlGraphicImage icon = new HtmlGraphicImage();
  HtmlCommandLink link = new HtmlCommandLink();
  link.setValue(Helper2.transformStringFirstLetterUpper(menusItems.getAvalue()));
  link.setValueExpression("actionListener", Helper2.createValueExpression("#{routesService.contextRedirect('" + route.getPattern() + "')}", Object.class));
  panelGrid.getChildren().add(icon);
  panelGrid.getChildren().add(link);
  item.getChildren().add(panelGrid); // here i get nullpointer exception

我得到nullpointer异常。我检查了

的源代码
 org.primefaces.model.menu.DefaultMenuItem

和方法getChildren返回null

enter image description here

我想知道如何将panelGrid放入p:menuitem。

我也尝试过切换

 DefaultMenuItem into UIMenuItem 

但是通过创建菜单模型我得到以下错误

  java.lang.IllegalArgumentException: 1
        at javax.faces.component.UIComponentBase.validateId(UIComponentBase.java:586)
        at javax.faces.component.UIComponentBase.setId(UIComponentBase.java:412)
        at org.primefaces.model.menu.BaseMenuModel.generateUniqueIds(BaseMenuModel.java:56)
        at org.primefaces.model.menu.BaseMenuModel.generateUniqueIds(BaseMenuModel.java:44)
        at org.primefaces.model.menu.DefaultMenuModel.generateUniqueIds(DefaultMenuModel.java:28)
        at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:111)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)

任何人都可以帮助解决这个问题我将不胜感激任何帮助。

0 个答案:

没有答案