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]