2012-02-27 3 views
0

私はListViewをNewsEntriesでAjax-Link経由で更新したいと思っています。私は毎月のリンクを持っており、クリックすると、特定の月のニュースを見せたい。Wicket-ListviewをAjaxLinkで更新するにはどうすればいいですか?

私はこのチュートリアルを試してみましたが、それは動作しません。ここで http://blog.xebia.com/2008/06/04/wicket-updating-listviews-using-an-ajaxlink/

は私のコードのサンプルです:

add(new Label("title", "News Archive")); 

    List<NewsEntry> newsEntries = new ArrayList<NewsEntry>(); 

    final ListView<NewsEntry> listview = new ListView<NewsEntry>(
      "newsItem", newsEntries) 
    { 
     private static final long serialVersionUID = -4294698878214798680L; 

     @Override 
     protected void populateItem(final ListItem<NewsEntry> item) 
     { 
      Link<Void> link = new Link<Void>("newsItemLinkID") 
      { 
       private static final long serialVersionUID = 6176760893378172041L; 

       @Override 
       public void onClick() 
       { 
        setResponsePage(getPage()); 
       } 
      }; 

      link.add(new Label("newsItemLinkName", item.getModelObject() 
        .getHeadline())); 
      link.setOutputMarkupId(true); 
      item.add(link); 
     } 
    }; 
    listview.setOutputMarkupId(true); 
    add(listview); 

    add(new AjaxLink<Object>("march") 
    { 
     private static final long serialVersionUID = 974013580329804810L; 

     @Override 
     public void onClick(AjaxRequestTarget target) 
     { 
      NewsDAO news = new NewsDAO(); 
      listview.setList(news.getNewsFromMonth(MONTH.MARCH)); 
      target.addChildren(listview, Link.class); 
     } 
    }); 

現時点では、何も表示されません。私はエラーもなく、ajax-debugウィンドウもmy Eclipseコンソールもありません。私は今ちょっと固まって、何が間違っているのか分からない。

答えて

6

ListViewをWebMarkupContainerにラップし、ListViewではなくこのコンテナを更新する必要があります。

+7

これは、リストビューの生成されたマークアップを見ると、1つのHTML要素ではなく、複数のアイテム(各アイテムに1つ)であることがわかります。 WicketのAjaxモデルは要素の置き換えに基づいているため、更新するには問題があります。ラップ 'WebMarkupContainer'を追加し、この問題を回避するために更新します。 – biziclop

+0

WebMarkupContainerを更新するにはどうすればよいですか? – lazydaemon

+0

WebMarkupContainerのモデル(CompoundPropertyModel)を更新しようとしています。それは内部的に働いていますが、ページ上で更新されていません。 – lazydaemon

関連する問題