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 に答える