使列表视图项可单击

时间:2012-06-15 20:57:25

标签: java listview wicket listviewitem wicket-1.5

我想制作列表视图的项目,即表格单元格,可点击以便它们发送到另一个页面。谁能告诉我这里的问题是什么?提前谢谢。

那是html:http://pastebin.com/qUaPzTwv

这就是我正在尝试的

    Application app = (Application) getApplication();
    MovieCollection col = app.getCollection();
    List<Movie> movies = col.getMovies();

    add(new ListView("movie_list", movies) {

        @Override
        protected void populateItem(ListItem item) {
            final Movie movie = (Movie) item.getModelObject();
            item.add(new Label("title", movie.getTitle()));
            item.add(new Label("year", Integer.toString(movie.getYear())));
            item.add(new Link("movie_link") {

                @Override
                public void onClick() {
                    setResponsePage(new MoviePage(movie));
                }
            });
        }
    });

这就是输出:

Last cause: Unable to find component with id 'title' in [ [Component id = movie_link]]
Expected: 'movie_list:0:movie_link.title'.
Found with similar names: 'movie_list:0:title', movie_list:1:title', movie_list:2:title'

1 个答案:

答案 0 :(得分:3)

正如评论的那样,这种情况正在发生,因为你的层次结构在html和java之间不匹配,这意味着如果你有一个带有wicket的元素:id有子元素的wicket:id's,你必须将子元素添加到父元素中。最终这就是你的页面工作方式:页面只不过是一个带有子项的组件,这就是你的ListView的工作方式。

 add(new ListView("movie_list", movies) {

    @Override
    protected void populateItem(ListItem item) {
        final Movie movie = (Movie) item.getModelObject();
        Link link = new Link("movie_link") {

            @Override
            public void onClick() {
                setResponsePage(new MoviePage(movie));
            }
        };
        item.add(link);
        link.add(new Label("year", Integer.toString(movie.getYear())));
        link.add(new Label("year", Integer.toString(movie.getYear())));
    }
});

您收到的错误会为您提供问题的答案。它为您提供了组件路径,它是一个wicket列表:从组件返回到页面的id。在这种情况下,它告诉你它希望“title”成为“movie_link”的子节点,但发现它是ListItem的子节点(“0”表示ListView子节点的索引... ListItems)