You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Igor Vaynberg <ig...@gmail.com> on 2007/08/15 21:16:30 UTC

Re: Order-Items master detail page

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 <ol...@web.de> 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:olegtaranenko@web.de<ol...@web.de>
>  --------------------------------------------------------------------- To
> unsubscribe, e-mail: users-unsubscribe@wicket.apache.org For additional
> commands, e-mail: users-help@wicket.apache.org