DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
I had a terrible time understanding DropDownChoices. So I'm hoping by posting this someone might understand it a little bit better.
package com.*.webapp.wicket;
import java.io.Serializable;
import java.util.ArrayList;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
public class TestPage extends BasePage {
public TestPage() {
add(new TestPageForm("form", new TestFormModel()));
}
}
class TestPageForm extends Form {
// one way to get the model is to set an instance variable
private final TestFormModel m_modelObject;
public TestPageForm(String id, TestFormModel modelObject) {
super(id); // form with no validation
m_modelObject = modelObject;
// !!! Note the period in the expression
add(new Label("label", new PropertyModel(modelObject, "comboChoice.label")));
add(new Label("value", new PropertyModel(modelObject, "comboChoice.value")));
// ----OR----
// if you use this method, you'll have to create two more get methods
// add(new Label("label", new PropertyModel(modelObject, "comboChoiceLabel")));
// add(new Label("value", new PropertyModel(modelObject, "comboChoiceValue")));
DropDownChoice comboChoiceDropDown = new DropDownChoice(
"comboChoice",
new PropertyModel(modelObject, "comboChoice"),
new Model(getChoices()),
new ChoiceRenderer("label", "value")
);
// ----OR----
// DropDownChoice comboChoiceDropDown = new DropDownChoice(
// "comboChoice",
// new PropertyModel(modelObject, "comboChoice"),
// new Model(getChoices()),
// new TestChoiceRenderer()
// );
comboChoiceDropDown.setRequired(true);
add(comboChoiceDropDown);
}
// This list can be created anywhere. Note that I'm adding SelectOptions to the list.
private static ArrayList getChoices() {
ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++) {
list.add(new SelectOption("Show to user " + i, "for backend " + i));
}
return list;
}
// one way to get the model
protected void onSubmit() {
// I don't recommend System.out, but to make this example
// as simple as possible, I'm doing that here.
System.out.println("m_modelObject = " + m_modelObject);
}
}
class TestFormModel implements Serializable {
// !!! Note the use of a SelectOption in my model object
SelectOption comboChoice;
public SelectOption getcomboChoice() {
return comboChoice;
}
public void setComboChoice(SelectOption comboChoice) {
this.comboChoice = comboChoice;
}
// if using this:
// add(new Label("label", new PropertyModel(modelObject, "comboChoiceLabel")));
// add(new Label("value", new PropertyModel(modelObject, "comboChoiceValue")));
// you'll have to use these get methods:
// public String getComboChoiceValue() {
// if (comboChoice == null)
// return null;
//
// return comboChoice.getValue();
// }
// public String getComboChoiceLabel() {
// if (comboChoice == null)
// return null;
//
// return comboChoice.getLabel();
// }
}
// Here's my own ChoiceRenderer, but a simpler method is to use new ChoiceRenderer("label", "value")
class TestChoiceRenderer implements IChoiceRenderer {
public Object getDisplayValue(Object object) {
// I don't know if it can be anything other...??
if (object instanceof SelectOption) {
SelectOption so = (SelectOption) object;
return so.getLabel();
}
return null;
}
public String getIdValue(Object key, int index) {
// I don't know if it can be anything other...??
if (key instanceof SelectOption) {
SelectOption selectOption = (SelectOption) key;
return selectOption.getValue();
}
return null;
}
}
class SelectOption implements Serializable {
private String m_label;
private String m_value;
public SelectOption(String label, String value) {
this.m_label = label;
this.m_value = value;
}
public String getLabel() {
return m_label;
}
public void setLabel(String label) {
this.m_label = label;
}
public String getValue() {
return m_value;
}
public void setValue(String value) {
this.m_value = value;
}
}
Disclaimer: I'm just a user of Wicket and not a developer of Wicket.