you will have to fill in some blanks public class MenuItem { private MenuItem parent; private List<MenuItem> children; private IModel label; private Class<? extends Page> }
public class Menu extends Panel { private boolean refresh = true; public MenuItem getPageItem() { return ((entrypage)getPage()).getMenuItem(); } @Override protected void onBeforeRender() { if (refresh) { if (get("menu") != null) { remove("menu"); } MenuItem item = getPageItem(); ArrayList<MenuItem> stack = new ArrayList<MenuItem>(); if (!item.getChildren().isEmpty()) { stack.add(0, item); } item = item.getParent(); while (item != null) { stack.add(0, item); item = item.getParent(); } add(new MenuItemFragment("menu", stack, 0)); refresh = false; } super.onBeforeRender(); } private static class ItemLink extends BookmarkablePageLink { private final boolean selected; public ItemLink(String id, Class<?> pageClass, boolean selected) { super(id, pageClass); this.selected = selected; } @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); if (selected) { tag.put("class", "on"); } } } private class MenuItemFragment extends Fragment { public MenuItemFragment(String id, List<MenuItem> stack, int index) { super(id, "menu-panel", Menu.this); MenuItem current = stack.get(index); StringBuilder stackPrefix = new StringBuilder(); for (int i = 0; i <= index; i++) { stackPrefix.append(stack.get(i).getMarkupId()); stackPrefix.append("__"); } final String stackPrefixId = stackPrefix.toString(); RepeatingView items = new RepeatingView("items"); add(items); for (MenuItem child : current.getChildren()) { if (!child.isVisible(security)) { continue; } final boolean selected = stack.contains(child) || child == getPageItem(); WebMarkupContainer item = new WebMarkupContainer(items.newChildId()); item.setMarkupId(stackPrefixId + child.getMarkupId()); item.setOutputMarkupId(true); items.add(item); Link link = new ItemLink("link", child.getPageClass(), selected); item.add(link); link.add(new Label("label", child.getLabel())); WebMarkupContainer submenu = new WebMarkupContainer("submenu"); item.add(submenu); if (selected && !child.getChildren().isEmpty()) { submenu.add(new MenuItemFragment("items", stack, index + 1)); } else { submenu.setVisible(false); } } } } } <wicket:panel> <ul id="nav"> <wicket:container wicket:id="menu"></wicket:container> </ul> <wicket:fragment wicket:id="menu-panel"> <li wicket:id="items"> <a wicket:id="link"><span wicket:id="label">[[ menu item label ]]</span></a> <ul wicket:id="submenu"> <wicket:container wicket:id="items"></wicket:container> </ul> </li> </wicket:fragment> </wicket:panel> public abstract class entrypage extends webpage { entrypage() { add(new menu("menu")); } public abstract MenuItem getMenuItem(); } -igor On Thu, May 8, 2008 at 11:25 PM, ArthIT <[EMAIL PROTECTED]> wrote: > > Nobody has a hint? > -- > View this message in context: > http://www.nabble.com/n-Level-Page-Navigation.-How-to-implement--tp17083157p17142043.html > Sent from the Wicket - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]