Is there anyway that you can update model before you move the item up or down
using moveuplink and movedownlink in listview. My goal is to save the input
data to the model so that I don't loose use input on the item before moving the
item. I did try to extend the ListView and added my own moveuplink and downlink
code called form's updateFormComponentModels() method but that didn't really
help. Does anyone have any idea how this can be done.
LeadTransnodeChain lc = new LeadTransnodeChain(1, 2, 3, 4, 5,
LeadTransnodeChain.MODE.ASYNC);
masterChainList.add(lc);
masterChainList.add(new LeadTransnodeChain(11, 12, 13, 14, 15,
LeadTransnodeChain.MODE.SYNC));
masterChainList.add(new LeadTransnodeChain(21, 22, 23, 24, 25,
LeadTransnodeChain.MODE.SYNC));
ListView propertiesList = new MyListView("masterChainList",
masterChainList) {
@Override
protected void populateItem(ListItem item) {
LeadTransnodeChain leadTransnodeChain = (LeadTransnodeChain)
item.getModelObject();
item.add(new Label("masterChain", new
PropertyModel(leadTransnodeChain, "m_masterChainID")));
item.add(new DropDownChoice("runAs", new
PropertyModel(leadTransnodeChain, "m_mode"),
Arrays.asList(LeadTransnodeChain.MODE.values()), new IChoiceRenderer() {
public Object getDisplayValue(Object mode) {
return ((LeadTransnodeChain.MODE) mode).toString();
}
public String getIdValue(Object obj, int index) {
return obj.toString();
}
}
));
item.add(moveMyUpLink("moveUp", item, form));
item.add(moveMyDownLink("moveDown", item, form));
}
};
add(new Button("submitButton"));
propertiesList.setReuseItems(true);
add(propertiesList);
}public void updateComponentModels(){
super.updateFormComponentModels();
}
public abstract class MyListView<T> extends ListView<T> {
...
protected abstract void populateItem(ListItem item) ;
/**
* Returns a link that will move the given item "down" (towards the end) in
the listView.
*
* @param id
* Name of move-down link component to create
* @param item
* @return The link component
*/
public final Link<Void> moveMyDownLink(final String id, final ListItem<T>
item, final MasterChainListForm form)
{
return new Link<Void>(id)
{
private static final long serialVersionUID = 1L;
/**
* @see org.apache.wicket.markup.html.link.Link#onClick()
*/
@Override
public void onClick()
{
final int index = getList().indexOf(item.getModelObject());
if (index != -1)
{
form.updateComponentModels();
addStateChange(new Change()
{
private static final long serialVersionUID = 1L;
final int oldIndex = index;
@Override
public void undo()
{
Collections.swap(getList(), oldIndex + 1, oldIndex);
}
});
// Swap list items and invalidate listView
Collections.swap(getList(), index, index + 1);
MasterChainListView.this.removeAll();
}
}
/**
* @see org.apache.wicket.Component#onBeforeRender()
*/
@Override
protected void onBeforeRender()
{
super.onBeforeRender();
setAutoEnable(false);
if (getList().indexOf(item.getModelObject()) ==
(getList().size() - 1))
{
setEnabled(false);
}
}
};
}
/**