Hi Wicket users,

I've a ListView in a ListView. The 1st ListVeiw holds "categories".
The 2nd ListView holds links (topics) which I want to be highlighted
if the link (topic) is clicked. The problem is that the wrapped list
(container) is getting refreshed, but the CSS class is not set for the
corresponding list item.
Below my code:

TestPage.java
========================================
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
import org.wicketstuff.annotation.mount.MountPath;

import com.hbiloo.receptino.web.page.template.PageWithoutSideBar;

@MountPath(path = "test")
public class TestPage extends PageWithoutSideBar {

        @SuppressWarnings("serial")
        public TestPage() {
                final WebMarkupContainer container = new 
WebMarkupContainer("container");
                container.setOutputMarkupId(true);

                container.add(new ListView<Category>("categories", 
buildCategories()) {
                        @Override
                        protected void populateItem(ListItem<Category> item) {
                                Category category = item.getModelObject();
                                item.add(new Label("category", 
category.getName()));
                                item.add(new ListView<Topic>("topics", 
category.getTopics()) {
                                        @Override
                                        protected void populateItem(final 
ListItem<Topic> item) {
                                                Topic topic = 
item.getModelObject();
                                                AjaxLink<String> topicLink = 
(new AjaxLink<String>("topicLink") {
                                                        @Override
                                                        public void 
onClick(AjaxRequestTarget target) {
                                                                
target.addComponent(container);
                                                                item.add(new 
AttributeModifier("class", true, new
Model<String>("highlight")));
                                                        }
                                                });
                                                topicLink.add(new 
Label("topic", topic.getName()));
                                                item.add(topicLink);
                                        }
                                });
                        }
                });
                add(container);
        }

        @SuppressWarnings("serial")
        private class Category implements Serializable {
                private String name;
                private List<Topic> topics;

                public Category(String name, List<Topic> topics) {
                        this.name = name;
                        this.topics = topics;
                }

                public String getName() {
                        return name;
                }

                public List<Topic> getTopics() {
                        return topics;
                }
        }

        @SuppressWarnings("serial")
        private class Topic implements Serializable {
                private String name;

                public Topic(String name) {
                        this.name = name;
                }

                public String getName() {
                        return name;
                }
        }

        private List<Category> buildCategories() {
                List<Category> categories = new ArrayList<Category>();
                categories.add(new Category("Movies", Arrays.asList(new 
Topic("Mamma"),
                                new Topic("USA"), new Topic("NL"))));
                categories.add(new Category("Articles", Arrays.asList(
                                new Topic("Test"), new Topic("Nederland"))));
                categories.add(new Category("Images", Arrays.asList(new 
Topic("Mag"),
                                new Topic("Spullen"), new Topic("Mamma mia"))));
                categories.add(new Category("Links", Arrays.asList(new 
Topic("Ana"),
                                new Topic("Smiti"), new Topic("Hbiloo"), new 
Topic("Yeeh"))));
                return categories;
        }
}

TestPage.html
========================================
<html xmlns:wicket>
    <wicket:extend>
    <ul class="menu" wicket:id="container">
        <li class="r" wicket:id="categories"><span class="category"
            wicket:id="category">Category A: </span>
        <ul>
            <li wicket:id="topics"><a wicket:id="topicLink"><span
                wicket:id="topic">Link</span></a></li>
        </ul>
        </li>
    </ul>
</wicket:extend>
</html>

Kind regards,

Hbiloo

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to