我想制作列表视图的项目,即表格单元格,可点击以便它们发送到另一个页面。谁能告诉我这里的问题是什么?提前谢谢。
那是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'
答案 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)