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.
--
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]