0

DropDownChoiceに問題があります。次のような学校のタイトルのリストを含む列挙型があります。

public enum StudyTitle {

    NONE(null,null),ELEMENTARY("1","Elementary"),COLLEGE("2","College");

    private String code;
    private String description;

    private StudyTitle(String code, String description){
        setCode(code);
        setDescription(description);
    }

    [setter and getter]

}

次に、コードを配置したい文字列プロパティ呼び出し「studyTitleCode」を持つPojoがあります(たとえば、小学校の場合は1、大学の場合は2など)。

DropDownChoice Wicketを作成すると、DropDownChoiceがStudyTitle型の場合、String型のプロパティモデルを使用できません。

元。[列挙型のArrayListとしてlistOfStudyTitleを構築する]

DropDownChoice<String> studyLevel = new DropDownChoice<String>("id",new PropertyModel<String>(myPojo,"studyTitleCode"),listOfStudyTitle,new ChoiceRenderer<StudyTitle>("description","code"));

Wicketが列挙型の1つのプロパティをモデルのプロパティにリンクできるようにする方法はありますか?

ありがとう

4

1 に答える 1

1

AbstractSingleSelectChoiceの選択オプションは、値モデルのタイプと一致する必要があります。私が知っているDropDownChoiceに関連する唯一の構成オプションは、列挙値のレンダリング方法を設定できるIChoiceRendererです(デフォルトのtoString()の呼び出しに対して)。

1つのオプションは、選択モデルにenumインスタンス自体を使用する代わりに、使用できるStringプロパティをenumに与えることです。

public enum TestEnum {
    ONE ("ONE"),
    TWO ("TWO"), 
    THREE ("THREE");

    private String value;

    TestEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public static List<String> getStringValues()
    {
        List<String> stringValues = new ArrayList<String>();
        for (TestEnum test : values()) {
            stringValues.add(test.getValue());
        }

        return stringValues;
    }
}

@Override
protected void onInitialize() {
    super.onInitialize();

    IModel<String> myStringValueModel = new Model<String>();
    add(new DropDownChoice<String>("id", myStringValueModel, TestEnum.getStringValues()));
}
于 2012-08-02T11:43:22.480 に答える