<ui:repeat> inside a <p:menubar>

UI Components for JSF
Post Reply
rafaeltscs
Posts: 44
Joined: 18 Dec 2010, 23:10

31 Jan 2011, 02:40

Hello guys,

I am trying to create a dynamic menubar doing the follwoing:

Code: Select all

<h:form>
		<p:menubar autoSubmenuDisplay="true" >  
			<p:submenu>  
	           <f:facet name="label">  
	               <p:menuitem value="#{messages.menu_home}" url="/" styleClass="menu_top_label" />  
	           </f:facet>
          	</p:submenu>
          	
          	<ui:repeat var="category" value="#{categoryBean.allCategories}">
          		<p:submenu>
	          		<f:facet name="label">  
		               <p:menuitem value="#{category.name}" url="#" styleClass="menu_top_label" />  
		           </f:facet>
	           </p:submenu>
          	</ui:repeat>
       </p:menubar>
</h:form>
However,

I am getting the following Exception:

WARNING: ApplicationDispatcher[/GarimpoWeb] PWC1231: Servlet.service() for servlet Faces Servlet threw exception
java.lang.ClassCastException: com.sun.faces.facelets.component.UIRepeat cannot be cast to org.primefaces.component.submenu.Submenu
at org.primefaces.component.menubar.MenubarRenderer.encodeMarkup(MenubarRenderer.java:91)
at org.primefaces.component.menubar.MenubarRenderer.encodeEnd(MenubarRenderer.java:42)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:157)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
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)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:820)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:517)
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:488)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:336)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:314)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:783)
at org.apache.jsp.index_jsp._jspService(index_jsp.java from :46)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:113)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:619)

So, I'd like to know if you guys know a way to build a menu dynamicaly.
NetBeans 7.3, Glassfish 3.1.2, Java EE 7, PrimeFaces 3.5 , Mojarra 2.1.17

robert.m
Posts: 226
Joined: 07 Dec 2010, 22:52
Location: Salzburg/Austria

31 Jan 2011, 03:03

You could try using the <c:forEach> from JSTL:
http://www.crazysquirrel.com/computing/ ... rEach.jspx

I think read something about <ui:repeat> not being compatible for cases like yours

cagatay.civici
Prime
Posts: 18616
Joined: 05 Jan 2009, 00:21
Location: Cybertron
Contact:

31 Jan 2011, 10:43

Use a menu model, it's created for this purpose.

rafaeltscs
Posts: 44
Joined: 18 Dec 2010, 23:10

31 Jan 2011, 19:36

I'm sorry, but what is a menu model?
NetBeans 7.3, Glassfish 3.1.2, Java EE 7, PrimeFaces 3.5 , Mojarra 2.1.17

robert.m
Posts: 226
Joined: 07 Dec 2010, 22:52
Location: Salzburg/Austria

31 Jan 2011, 21:42

Have a look at the showcase, i.e. the "MenuBean" of the Menu-Component:

Code: Select all

public class MenuBean {  
     private MenuModel model;  
   
     public MenuBean() {  
         model = new DefaultMenuModel();  
           
         //First submenu  
         Submenu submenu = new Submenu();  
         submenu.setLabel("Dynamic Submenu 1");  
           
         MenuItem item = new MenuItem();  
         item.setValue("Dynamic Menuitem 1.1");  
         item.setUrl("#");  
         submenu.getChildren().add(item);  
           
         model.addSubmenu(submenu);  
           
         //Second submenu  
         submenu = new Submenu();  
         submenu.setLabel("Dynamic Submenu 2");  
           
         item = new MenuItem();  
         item.setValue("Dynamic Menuitem 2.1");  
         item.setUrl("#");  
         submenu.getChildren().add(item);  
           
         item = new MenuItem();  
         item.setValue("Dynamic Menuitem 2.2");  
         item.setUrl("#");  
         submenu.getChildren().add(item);  
           
         model.addSubmenu(submenu);  
     }  
       
     public MenuModel getModel() {  
         return model;  
     }     
}  
Then use the Menu-Component like this:

Code: Select all

<p:menu model="#{menuBean.model}"/>  

rafaeltscs
Posts: 44
Joined: 18 Dec 2010, 23:10

31 Jan 2011, 21:48

Oh... got it!

Thanks!
NetBeans 7.3, Glassfish 3.1.2, Java EE 7, PrimeFaces 3.5 , Mojarra 2.1.17

rafaeltscs
Posts: 44
Joined: 18 Dec 2010, 23:10

01 Feb 2011, 01:15

How do I represent the following menu dynamically?

Code: Select all

<p:menubar autoSubmenuDisplay="true">  
			<p:submenu>  
	           <f:facet name="label">  
	               <p:menuitem value="#{messages.menu_home}" url="/" styleClass="menu_top_label" />  
	           </f:facet>
          	</p:submenu>
What I mean is: The Menu Component only accepts SubMenu as a child.
I want my menu with direct buttons. There are no subItens.

I tried doing this:

Code: Select all

@PostConstruct
	public void loadMenu(){				
		MenuItem item = new MenuItem();
		item.setValue(AppUtil.getResourceString("menu_home"));
		item.setUrl("/");
		item.setStyleClass("menu_top_label");
		
	        menuModel.addItem(item);
		
	}


But I get this exception saying that I cannot cast a Item to SubMenu.

So, I could get it working doing the following:

Code: Select all

public void loadMenu(){
	
		Submenu submenu = new Submenu();
		MenuItem item = new MenuItem();
		item.setStyleClass("menu_top_label");
		
		item.setValue(AppUtil.getResourceString("menu_home"));
		item.setUrl("/");
		
		submenu.getFacets().put("label", item);
		
		menuModel.addSubmenu(submenu);
		
}
Is that the best way of doing this?
NetBeans 7.3, Glassfish 3.1.2, Java EE 7, PrimeFaces 3.5 , Mojarra 2.1.17

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: Google [Bot] and 30 guests