How to create dynamic PanelMenu
michaeltr Jul 18, 2008 3:17 AMHello
I want to create a PanelMenu with groups and items with data from a database.
When calling the page I got an exception:
java.lang.ClassCastException: com.sun.facelets.component.UIRepeat
at org.richfaces.renderkit.html.PanelMenuRenderer.insertScript(PanelMenuRenderer.java:142)
at org.richfaces.renderkit.html.HtmlPanelMenuRenderer.doEncodeEnd(HtmlPanelMenuRenderer.java:261)
at org.richfaces.renderkit.html.HtmlPanelMenuRenderer.doEncodeEnd(HtmlPanelMenuRenderer.java:272)
at org.ajax4jsf.renderkit.RendererBase.encodeEnd(RendererBase.java:135)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:896)
at com.sun.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:50)
at com.sun.facelets.component.UIRepeat.process(UIRepeat.java:357)
...
I assume that PanelMenu allows only PanelMenuGroup/PanelMenuItem as child. What can I do (I tried with for each, but the data is loaded to late, so my MenuItems are empty.
Tried with 3.2.1GA an 3.2.2 nightly, both failed.
Bean:
@Name("menuaction")
@Scope(ScopeType.SESSION)
public class MenuAction {
@In
private Session seam5Datasource;
@DataModel
private List topLevelMenuList = new ArrayList();
@DataModelSelection("topLevelMenuList")
@Out(required = false)
@In(required = false)
private TopLevelMenu topLevelMenu;
@Factory("topLevelMenuList")
public void getTopLevelMenus() {
String queryString = "select t from TopLevelMenu t order by sortOrder, text" ;
topLevelMenuList = seam5Datasource.createQuery(queryString).list();
}
public Collection getMenuCollection()
{
return topLevelMenu == null ? null : topLevelMenu.getMenus();
}
XHTML-File:
<ui:repeat value="${topLevelMenuList}" var="tlm">
<rich:panelMenu mode="server">
<rich:panelMenuGroup label="${tlm.text}" action="xyz">
<ui:repeat value="${menuaction.getMenuCollection()}" var="m">
<rich:panelMenuItem label="${m.menuText}" reRender="test"
action="${m.menuLink}">
</rich:panelMenuItem>
</ui:repeat>
</rich:panelMenuGroup>
</rich:panelMenu>
</ui:repeat>
Michael