2012-06-15 2 views
0

Я хочу сделать элементы списка, т. Е. Ячейки таблицы, кликабельными, чтобы они отправили на другую страницу. Может ли кто-нибудь сообщить мне, в чем моя проблема? Заранее спасибо.Создание элементов списка элементов 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' 
+1

Похоже, что иерархия в html и java не совпадает. в Java вы добавляете заголовок и год в элемент (элемент ), но в html он находится внутри элемента . Вы должны добавить заголовок и год в java к объекту Link. – bert

+0

Выполнение того, что вы сказали, решило его, я действительно не знал об иерархии, я новичок в веб-материалах, большое спасибо. – NotCamelCase

ответ

3

Как отметил, что это происходит потому, что ваша иерархия не соответствует между html и java, что означает, что если у вас есть элемент с калиткой: id, у которого есть дочерние элементы с калиткой: id, вы должны добавить детей к их p Arents. В конечном итоге именно так работает ваша страница: страница представляет собой не что иное, как компонент с детьми, и именно так работает 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()))); 
    } 
}); 

Ошибка, которую вы получаете, дает вам ответ на ваш вопрос. Он дает вам путь к компоненту, который представляет собой список калитки: идентификатор от компонента обратно на страницу. В этом случае он сообщает вам, что «title» должен быть дочерним элементом «movie_link», но обнаружил, что он является дочерним элементом ListItem («0» представляет индекс дочерних элементов ListView ... ListItems)

+0

+1 для указания того, как использовать информацию в исключении, чтобы решить проблему. Вы дали ОП удочку, а также рыбу. :) – biziclop

Смежные вопросы