Hi All,
I'm trying to do something pretty simple: create a choice list with
multi-select, which I iterate through upon clicking a button.
Unfortunately, it looks like my selections aren't being recorded in the
model that's supposed to receive them. Here's what the pertinent code looks
like:
- Java:
public EditIssuePage extends WebPage {
// I've tried removing the 'transient' keyword, but that doesn't change
anything
transient private Set <Party> selectedParties = new HashMap <Party> ();
...
public EditIssuePage () {
...
Form form = new Form ("editIssueForm");
add (form);
...
ListMultipleChoice <Party> partyChoice = new ListMultipleChoice
<Party> (
"parties",
new PropertyModel (this, "selectedParties"),
new LoadableDetachableModel <List <Party>> () {
@Override
public List <Party> load () {
return new Vector <Party> (retrieveAllPartiesFromDAO ());
}
},
new IChoiceRenderer <Party> () {
public Object getDisplayValue (Party object) {
return object.getFullName ();
}
public String getIdValue (Party object, int index) {
return object.getId ();
}
}
);
Button addPartiesButton = new Button ("addPartiesButton") {
@Override
public void onSubmit () {
logger.debug ("Number of selected parties: " +
selectedParties.size ()); // always reporting zero!
for (Party selectedParty : selectedParties) {
...
}
}
};
form.add (partyChoice);
form.add (addPartiesButton);
}
private Set <Party> retrieveAllPartiesFromDAO () {
// does what it sounds like
}
}
- HTML: (My memory is a bit hazy here; I don't have any of this code in
front of me as I write this)
...
<select multiple wicket:id="parties">
<option>[A party should be here]</option>
</select>
<submit wicket:id="addPartiesButton" name="Add Selected Parties"/>
...
The page renders fine, with all Party objects listed for selection. But
when I select one or more of the rows and click the button, the log message
I see is "Number of selected parties: 0", no matter what. I have very
similar logic working on another page, so I'm pretty confused about what's
the problem here. All advice is much appreciated.
Thanks,
Ray Weidner