Java 使列表视图项可单击

Java 使列表视图项可单击,java,listview,wicket,listviewitem,wicket-1.5,Java,Listview,Wicket,Listviewitem,Wicket 1.5,我想让列表视图的项目,即表格单元格,可点击,以便他们将发送到另一个页面。有人能告诉我这里有什么问题吗?提前谢谢 这就是html: 这就是我要尝试的 Application app = (Application) getApplication(); MovieCollection col = app.getCollection(); List<Movie> movies = col.getMovies(); add(new ListView("movi

我想让列表视图的项目,即表格单元格,可点击,以便他们将发送到另一个页面。有人能告诉我这里有什么问题吗?提前谢谢

这就是html:

这就是我要尝试的

    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));
                }
            });
        }
    });

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

如注释所示,发生这种情况是因为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\u link”的子级,但发现它是ListItem的子级(0表示ListView子级的索引…ListItems)

看起来html和java中的层次结构不匹配。在Java中,您向项目(元素)添加标题和年份,但在html中它位于元素内部。你应该在链接对象中添加java中的标题和年份。按照你说的解决了这个问题,我对层次结构不太了解,我是网络新手,非常感谢。看起来html和java中的层次结构不匹配。在Java中,您向项目(元素)添加标题和年份,但在html中它位于元素内部。你应该在Link对象中添加title和year,用java语言。照你说的做已经解决了这个问题,我对层次结构不太了解,我是网络新手,非常感谢。+1指出了如何使用异常中的信息来解决这个问题。你给了OP一根鱼竿和一条鱼+1用于指出如何使用异常中的信息来解决问题。你给了OP一根鱼竿和一条鱼