0

我有一个要在多个位置使用的设置。我需要获取并设置一个整数值: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。有任何想法吗?

4

2 回答 2

1

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

对于您的用例,您可以使用DropDownChoiceSelect。在这两种情况下,您都需要 custom IChoiceRenderer

Select应该比DropDownChoice您需要对每个选项进行更多控制时更可取。DropDownChoice使用 POJO 列表。

于 2017-06-28T12:27:18.777 回答
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;
    }
};
于 2017-08-01T18:22:19.830 回答