0

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

那是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'
4

1 回答 1

3

正如所评论的,发生这种情况是因为您的层次结构在 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)

于 2012-06-15T21:36:31.057 回答