Как получить выбранное значение в Wicket DropDownChoice?

В форме калитки у меня есть DropDownChoice, и я хочу взять выбранное значение в нем. Я имею:

private final List<DimSpecific> specificList;
private DimSpecific specificPtr = null;
...
specificList = roles.getSpecificList();
specificPtr = new DimSpecific();
DropDownChoice specific = new DropDownChoice("specific", new Model<>(specificPtr), specificList, new ChoiceRenderer<DimSpecific>("code", "id"));
Form form = new Form("frm_0_07"){
    @Override
    protected void onSubmit() {
        String specificSelected = specificPtr.getCode();
    }
}

И переменная specificSelected равно null, Как я могу получить выбранное значение?

2 ответа

Решение

Вы добавили DropdownChoice в форму?

Обновленный вами объект модели будет обновлен, а не сам объект. В вашем случае это неназначенная переменная (new Model<>(specificPtr)), поэтому вы не можете читать из нее.

Попробуй это:

private final List<DimSpecific> specificList;
private DimSpecific specificPtr = new DimSpecific(); // or init to some default value
private IModel<DimSpecific> dropdownModel = new PropertyModel<DimSpecific>(this, "specficicPtr");
...
specificList = roles.getSpecificList();
DropDownChoice specific = new DropDownChoice("specific", dropdownModel , specificList, new ChoiceRenderer<DimSpecific>("code", "id"));
Form form = new Form("frm_0_07"){
    @Override
    protected void onSubmit() {
        String specificSelected = dropdownModel.getObject();
    }
}

Это также сделает конкретный Ptr равным выбранному значению - причина в том, что PropertyModel сообщает выпадающему выбору, где setObject() для выбранного раскрывающегося списка при отправке - в конкретный Ptr.

Попробуй это:

List<DimSpecific> list = getList(); //not importent
Model<DimSpecific> dimSpecificModel = new Model<DimSpecific>();
ChoiceRenderer<DimSpecific> choiceRenderer = new ChoiceRenderer<>("code", "id");
DropDownChoice<DimSpecific> choice = new DropDownChoice<DimSpecific>("specific", dimSpecificModel, list, choiceRenderer);

Button button = new Button("button", Model.of("")){
    @Override
    public void onSubmit() {
        System.out.println(dimSpecificModel.getObject());
    }
};
Другие вопросы по тегам