Hello, I'm very new to wicket so this may be a "duh" situation, but here's
what I'm trying to do:
I have a form that shows you a ChoiceList of things. You can select one and
then hit the submit button to delete that item. I've written this
functionality but found that it doesn't work the way I want. For some
reason, Wicket asks the ChoiceList for its list BEFORE the form's onSumbit
is called. As a result, the page gets the list before the item is deleted.
And as a result of that, the item is still in the list even though it's been
removed from the database. If I refresh my browser, the item disappears.
So, my question is, how do I get the ChoiceList to ask for its list AFTER
the form's onSubmit is called? Here's my code (note that I'm extending
ChoiceList, but I don't think I'm overriding any related functionality):
//the choicelist
public class WorldChoiceList extends ListChoice {
@SpringBean
private WorldService worldService;
public WorldChoiceList(String id, IModel model) {
super(id);
setChoices(new LoadableDetachableModel() {
protected Object load() {
return worldService.allByName();
}
});
setChoiceRenderer(new IChoiceRenderer() {
public Object getDisplayValue(Object object) {
World w = ((World) object);
return w.getName() + "," + w.getMaxX() + "," + w.getMaxY();
}
public String getIdValue(Object object, int index) {
if (object.equals("")) {
return "";
}
return String.valueOf(((World) object).getWorldId());
}
});
setModel(model);
setNullValid(false);
}
/**
* This override makes it so that the List does not start with a blank
or a "Choose One"
* label.
* @param selected The selected object
* @return ""
*/
protected CharSequence getDefaultChoice(final Object selected) {
return "";
}
}
//the web page
public class AdminHome extends AdminPage {
@SpringBean
private WorldService worldService;
private World selected;
public AdminHome() {
add(new FeedbackPanel("feedback"));
Form form = new Form("form") {
public void onSubmit() {
if (selected != null)
worldService.deleteWorld(selected);
}
};
form.add(new WorldChoiceList("worldList", new Model() {
public void setObject(final Object object) {
selected = (World) object;
}
}));
add(form);
add(new BookmarkablePageLink("createWorld", CreateWorld.class));
}
}
Thanks for any help :-)