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