you create a new instance of itemsDataProvider but your listview never gets that new instance, so its using the old one. instead you should change the data that instance returns:
IDataProvider itemsDataProvider = new idataprovider() { count() { if (selected==null) return 0; else return selected.items.size(); } iterator() { if (selected==null) { return new EmptyIterator(); } else { return selected.items.iterator(); } } -igor On 8/15/07, Oleg Taranenko <[EMAIL PROTECTED]> wrote: > > Hi, > > > I have the simplest use case, but i'm finally confused, please help. > > > I have 2 DataViews with ListDataProvider. > > Left dataview shows Orders, right must show order items, when I click on > the order number. > > > > > I have simple list - Order List and Order Items List: > > Both created as DataView with ListDataProviders. > > List Provider for items depends on clicked ajax link. > > > It seems that IDataProvider static bound to the markup? and cannot be > changed > > > How i can show order's item in the Items List by click on Ajax Link in > Order Lis? > > > I thought enough add > > > ----- Markup ------ > > HomePage.html > > > <html> > > <body> > > > > <table cellspacing="0" cellpadding="2" border="1"> > > <tr wicket:id="orders"> > > <td><span wicket:id="id">[id]</span></td> > > <td><a wicket:id="alink"><span > wicket:id="name">[name]</span></a></td> > > </tr> > > </table> > > > <div wicket:id="itemsWrap"></div> > > </body> > > </html> > > > > HomePage$ItemsPanel.html > > > <wicket:panel> > > <table cellspacing="0" cellpadding="2" border="1"> > > <tr wicket:id="items"> > > <td><span wicket:id="itemid">[id]</span></td> > > <td><span wicket:id="itemname">[name]</span></td> > > </tr> > > </table> > > </wicket:panel> > > > ------ Code ------ > > HomePage.java: > > > public class HomePage extends WebPage { > > > > private Order selected; > > IDataProvider itemsDataProvider = new ListDataProvider( > Collections.emptyList()); > > > > private ItemsPanel itemsWrap; > > > > public HomePage(final PageParameters parameters) { > > > IDataProvider orderDataProvider = new ListDataProvider( > Order.orderList); > > add (new DataView("orders", orderDataProvider) { > > > @Override > > protected void populateItem(Item item) { > > Order order = (Order) item.getModelObject > (); > > item.add(new Label("id", order.getId > ().toString())); > > final AjaxLink link; > > item.add(link = new AjaxLink("alink",new > Model(order)) { > > > @Override > > public void > onClick(AjaxRequestTarget target) { > > counter1++; > > selected = (Order) > this.getModelObject(); > > itemsDataProvider = new > ListDataProvider(toList(selected.getItems())); > > > > target.addComponent(c1); > > itemsWrap.setVisible(true); > > target.addComponent > (itemsWrap); > > } > > > > }); > > link.add(new Label("name", order.getName > ())); > > } > > > > }); > > add (itemsWrap = new ItemsPanel("itemsWrap")); > > itemsWrap.setOutputMarkupId(true); > > itemsWrap.setVisible(true); > > > } > > > > > > /*************************** > > * Items Panel. > > ***************************/ > > public class ItemsPanel extends Panel { > > > public ItemsPanel(String id) { > > super(id); > > add (new DataView("items", itemsDataProvider) { > > > @Override > > protected void populateItem(Item item) { > > OrderItem orderItem = (OrderItem) > item.getModelObject(); > > item.add(new Label("itemid", > orderItem.getId().toString())); > > item.add(new Label("itemname", > orderItem.getOrderId().toString())); > > } > > > > }); > > > > } > > > > } > > > > public List<Object> toList(Set<? extends Object> set) { > > if (set == null) { > > throw new NullPointerException("argument must not > be null"); > > } > > List<Object> result = new ArrayList<Object>(set.size()); > > result.addAll(set); > > return result; > > } > > > > } > > > It does not works, order items are not shown at all. :( > > > It seems like itemsDataProvider is bound static and therefore cannot be > used this way... What is the Wicket way in my situation? > > > Thanks for any tip. > > > > -- > > Oleg mailto:[EMAIL PROTECTED]<[EMAIL PROTECTED]> > --------------------------------------------------------------------- To > unsubscribe, e-mail: [EMAIL PROTECTED] For additional > commands, e-mail: [EMAIL PROTECTED]