Hi, friends.
Could you help me with subject?
Here is the situation. I want to create manageable list of item, so I could
add new items to it, update current state of each item and remove items.
I'm using ListView for this purpose. Here is sample code that works with
List<String> that describes items:
public class ItemsPanel extends Panel {
// here goes fields definition section
// list of items to show
private List<String> items;
public ItemsPanel( String id ) {
super( id );
items = new ArrayList<String>();
items.add( "String 0" );
items.add( "String 1" );
final ListView<String> itemsList = new PropertyListView<String>(
"items", new PropertyModel<List<String>>( this, "items" ) )
{
@Override
protected void populateItem( final ListItem<String> item ) {
final WebMarkupContainer baseDiv = new WebMarkupContainer( "title"
);
baseDiv.add( new Label( "text", item.getModel() ) );
final WebMarkupContainer deleteImg = new WebMarkupContainer(
"delete.arrow" );
deleteImg.add( new AjaxEventBehavior( "onClick" ) {
@Override
protected void onEvent( AjaxRequestTarget target ) {
testStrings.remove( item.getModelObject() );
target.addComponent( ItemsPanel.this );
}
});
baseDiv.add( deleteImg );
item.add( baseDiv );
}
};
itemsList.setReuseItems( true );
itemsList.setOutputMarkupId( true );
add( itemsList );
add( new AjaxLink<Void>( "add" ) {
@Override
public void onClick( AjaxRequestTarget target ) {
testStrings.add( "New String " + (items.size() + 1) );
target.addComponent( ItemsPanel.this );
}
});
setOutputMarkupId( true );
}
}
Markup for this class is:
<html>
<body>
<wicket:panel>
<a wicket:id="add">Add item</a>
<div wicket:id="items">
<div wicket:id="title" class="list_title">
<span class="label" wicket:id="text">[Here goes a
text]</span>
<img src="/img/delete.gif" class="delete_arrow"
wicket:id="delete.arrow"/>
<br/>
</div>
</div>
</wicket:panel>
</body>
</html>
It'is working perfectly, but when I'm changing List<String> to
List<CustomType>, where CustomType is custom class with appropriated info,
when I push delete arrow last item from showed list is removed, not that one
that I want to delete. But correct item is removed from backed list of
items. I can't understand what's wrong. During debug I can see that backed
list of items contains right set of items, but in html appeared other list
of items.
Best regards, Alexander.