我想在多个位置使用一个设置。我需要得到并设置一个Integer值:0,1,2,-1。不存储显示的字符串。
html的片段:
<select wicket:id="thingPref">
<option>1</option>
<option>2</option>
</select>
Java的片段。
import org.apache.wicket.extensions.markup.html.form.select.SelectOption;
import org.apache.wicket.markup.html.form.DropDownChoice;
private SelectOption thingPreference;
private void buildCommon()
{
thingPreference = new SelectOption(Integer.toString(setting()), new Model<String>("dummy"));
List<SelectOption> prefChoices = new ArrayList<SelectOption>();
prefChoices.add(new SelectOption<String>("0", new Model<String>("Current Thing")));
prefChoices.add(new SelectOption<String>("1", new Model<String>("One Prior Thing")));
prefChoices.add(new SelectOption<String>("2", new Model<String>("Two Prior Things")));
prefChoices.add(new SelectOption<String>("-1", new Model<String>("All Things")));
DropDownChoice<SelectOption> prefselect = new DropDownChoice<SelectOption>("thingPref",
new PropertyModel<SelectOption>(this, "thingPreference"), prefChoices)
{
private static final long serialVersionUID = 1L;
protected boolean wantOnSelectionChangedNotifications()
{
return true;
}
protected void onSelectionChanged(final String newSelection)
{
System.out.format("onSelectionChanged(%s)%n", newSelection);
}
};
prefselect.setNullValid(false);
prefselect.setRequired(true);
add(prefselect);
}
开发者工具显示类似这样的HTML
<option value="3">[SelectOption [Component id = -1]]</option>
当我需要时
<option value="-1">All Things</option>
解决方案看起来不像添加渲染器那么简单,我不确定该设置应该使用枚举。我正在使用Wicket 7.6。有什么想法吗?
答案 0 :(得分:0)
org.apache.wicket.extensions.markup.html.form.select.SelectOption
应与org.apache.wicket.extensions.markup.html.form.select.Select
一起使用,而不应与org.apache.wicket.markup.html.form.DropDownChoice
一起使用。
对于您的使用案例,您可以使用DropDownChoice
或Select
。在这两种情况下,您都需要自定义IChoiceRenderer
。
Select
应优先于DropDownChoice
。 DropDownChoice
使用POJO列表。
答案 1 :(得分:0)
我应用了自定义渲染器来显示数据选项。
private static final List<Integer> TermSettings = Arrays.asList(0, 1, 2, -1);
ChoiceRenderer<Integer> choiceRenderer = new ChoiceRenderer<Integer>()
{
private static final long serialVersionUID = 1L;
@Override
public Object getDisplayValue(Integer value)
{
switch (value)
{
case 0:
return "Current Term";
case 1:
return "One Prior Term";
case 2:
return "Two Prior Terms";
case -1:
return "All Terms";
default:
throw new IllegalStateException(value + " is not mapped!");
}
}
@Override
public String getIdValue(Integer object, int index)
{
Integer idvalue = TermSettings.get(index);
String strvalue = String.valueOf(idvalue);
return strvalue;
}
};