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]

--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to