繁体   English   中英

使列表视图项目可点击

[英]Making list view items clickable

我想使列表视图的项目(即表格单元格)可单击,以便它们可以发送到另一页。 谁能让我知道我的问题在这里吗? 提前致谢。

就是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'

如前所述,发生这种情况是因为html和java之间的层次结构不匹配,这意味着,如果您有一个wicket:id元素,而其子元素带有wicket:id子元素,则必须将子代添加到其父代中。 最终,这就是您页面的工作方式:该页面不过是带有子组件的组件,这就是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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM