Hello all,

I'm really new in the object world in general and using Wicket particularly, so please excuse if I'm missing something... I've googled around but maybe I didn't use the good keywords.


So here's my question !

I'm building a navigation menu for my web application. There are 3 different levels, the higher one is linking to different Wicket pages. My top level menu is html coded like this :

<ul>
        <li>Menu Item 1</li>
        <li class="current">Menu Item 2</li>
        <li>Menu Item 3</li>
</ul>

Notice the class="current" on the selected page.

I've already created the following code (see below), but was wondering if there are any means to use the Wicket autolink feature ? It would be far more simplier... The difficulty I see is to modify the <li> tag on the selected link ? Thanks for advices !



// LayoutAuthenticated.html
...
        <ul wicket:id="menu1a">
                <li wicket:id="menu1aItem"><a>Libellé menu1</a></li>
        </ul>
...



// LayoutAuthenticated.java

        protected MenuItem menu1aOpt1;
        protected MenuItem menu1aOpt2;
        protected MenuItem menu1aOpt3;

        public LayoutAuthenticated() {
...
                List<MenuItem> menu1aList = new ArrayList<MenuItem>();
menu1aList.add(menu1aOpt1 = new MenuItem("menu1aItem", true, "menu1a.Opt1", Opt1.class)); menu1aList.add(menu1aOpt2 = new MenuItem("menu1aItem", true, "menu1a.Opt2", Opt2.class)); menu1aList.add(menu1aOpt3 = new MenuItem("menu1aItem", true, "menu1a.Opt3", Opt3.class));
                add(new ListView<MenuItem>("menu1a", menu1aList) {
                        @Override
                        protected void populateItem(ListItem<MenuItem> item) {
                                item.add(item.getModelObject());
                        }
                });
...
        }



// MenuItem.html

<wicket:panel>
<li wicket:id="menuItem"><a wicket:id="link"><span wicket:id="label" /></a></li>
</wicket:panel>



// MenuItem.java

        private String keyLabel;
        private Class lienClass;
        private WebMarkupContainer menuItem;
        private BookmarkablePageLinkWithoutDisabledMarkup link;

public MenuItem(String wicketId, boolean isActive, String keyLabel, Class lienClass) {
                super(wicketId);

                setLienClass(lienClass);
                setKeyLabel(keyLabel);

                setRenderBodyOnly(true);
                add(menuItem = new WebMarkupContainer("menuItem"));
menuItem.add(link = new BookmarkablePageLinkWithoutDisabledMarkup("link", lienClass));
                Label label;
                link.add(label = new Label("label", new 
ResourceModel(keyLabel)));
                label.setRenderBodyOnly(true);
        }

        public void setLienClass(Class lienClass) {
                this.lienClass = lienClass;
        }

        public void setKeyLabel(String keyLabel) {
                this.keyLabel = keyLabel;
        }

        public void setActive() {
                menuItem.add(new SimpleAttributeModifier("class",""));
                link.setEnabled(true);
        }

        public void setInActive() {
                menuItem.add(new SimpleAttributeModifier("class","current"));
                link.setEnabled(false);
        }



// BookmarkablePageLinkWithoutDisabledMarkup.java
// (just to keep my <a> tag on selected links)

        public <C extends Page> 
BookmarkablePageLinkWithoutDisabledMarkup(String id,
                        Class<C> pageClass) {
                super(id, pageClass);
        }

        @Override
        protected void disableLink(ComponentTag tag) {
                tag.remove("href");
        }



// Opt1.java

public class Opt1 extends LayoutAuthenticated {
        public Opt1() {
                menu1aOpt1.setInActive();
        }
}



// Opt2.java

public class Opt2 extends LayoutAuthenticated {
        public Opt2() {
                menu1aOpt2.setInActive();
        }
}



// Opt3.java

public class Opt3 extends LayoutAuthenticated {
        public Opt3() {
                menu1aOpt3.setInActive();
        }
}



// Wicket application init()
// (don't need the default <em> tags around the selected link label)

...
                getMarkupSettings().setDefaultBeforeDisabledLink("");
                getMarkupSettings().setDefaultAfterDisabledLink("");
...


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to