UKK
UKK

Reputation: 167

how to get current page in wicket

i am trying to create dynamic navigation links in which current page link should be highlighted but i am unable to get desired outcome. i am using listview to display my menu items but unable to highlight the current page link.

please suggest necessary changes

public class SearchPage extends WebPage implements Serializable {

private static final long serialVersionUID = 1L;
Logger log = Logger.getLogger(SearchPage.class);
public SearchPage() {

    List<HeaderListItems> headerPOJOItems = new ArrayList<HeaderListItems>();
    HeaderListItems searchHLI = new HeaderListItems();

    searchHLI.setLabel("Search");
    searchHLI.setDestPage(SearchPage.class);
    headerPOJOItems.add(searchHLI);

    HeaderListItems jobsHLI = new HeaderListItems();

    jobsHLI.setLabel("Jobs");
    jobsHLI.setDestPage(Jobs.class);
    headerPOJOItems.add(jobsHLI);

    HeaderListItems urlHLI = new HeaderListItems();

    urlHLI.setLabel("URL");
    urlHLI.setDestPage(URL.class);
    headerPOJOItems.add(urlHLI);

    HeaderListItems syssettingsHLI = new HeaderListItems();

    syssettingsHLI.setLabel("System Settings");
    syssettingsHLI.setDestPage(Settings.class);
    headerPOJOItems.add(syssettingsHLI);

    HeaderListItems usersHLI = new HeaderListItems();

    usersHLI.setLabel("Users");
    usersHLI.setDestPage(User.class);
    headerPOJOItems.add(usersHLI);

    HeaderListItems logoutHLI = new HeaderListItems();

    logoutHLI.setLabel("Logout");
    logoutHLI.setDestPage(WebApp.get().getHomePage());
    headerPOJOItems.add(logoutHLI);

    add(new ListView("headerlistview", headerPOJOItems) {

        @Override
        protected void populateItem(ListItem item) {
            final HeaderListItems headerlistitems = (HeaderListItems) item
                    .getModelObject();
            log.info("Label: " + headerlistitems.getLabel() + " dest: "
                    + headerlistitems.getDestPage());
            Link newlink = new Link("newlink") {

                @Override
                public void onClick() {

                    setResponsePage(headerlistitems.getDestPage());

                }

            };
            newlink.add(new Label("newlabel", headerlistitems.getLabel()));
            newlink.add(new AttributeModifier("class",
                    new AbstractReadOnlyModel() {

                        @Override
                        public Object getObject() {
                            // TODO Auto-generated method stub
                            return getPage().getClass().equals(
                                    headerlistitems.getDestPage()
                                            .getClass()) ? "activeitem"
                                    : AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE;
                        }
                    }));
            item.add(newlink);

        }


    });
}

List is list of pojo item. my pojo has two fields label(String) and destPage(Class)

My Mark-up:

<html xmlns:wicket="http://wicket.apache.org">
<head>
<title>Search Page</title>
<link href="css/design.css" type="text/css" rel="stylesheet" />
</head>
<body>
    <div id="container">
        <div class="header">
            <div class="header_tab1">
                <p align="center">Logo</p>
            </div>
            <div class="header_tab2">&nbsp;</div>
            <div class="header_tab3">
                <table width="100%">
                    <tr>
                        <td wicket:id="headerlistview">
                            <ul>
                                <li><a href="#" wicket:id="newlink"><span
                                        wicket:id="newlabel"></span></a></li>
                            </ul>
                        </td>
                    </tr>
                </table>
            </div>
        </div>

    </div>



</body>
</html>

I have a CSS class activeitem which i am using in attribute modifier

Thanks in advance

Upvotes: 1

Views: 2447

Answers (1)

iluwatar
iluwatar

Reputation: 1803

Change the class comparison to:

return getPage().getClass().equals(
    headerlistitems.getDestPage()) ? "activeitem" : AttributeModifier.VALUELESS_ATTRIBUTE_REMOVE;

The next step would be to extract the navigation into its own panel, so you can reuse it in your pages.

Good luck.

Upvotes: 1

Related Questions