Wicket ListView - обновить выпадающий список через текстовое поле

Я создал представление списка, в котором будет показано количество записей в табличном представлении, а внутри представления списка есть текстовое поле и поле выпадающего выбора.

Что мне нужно сделать, так это заменить текстовое поле на значение по умолчанию в выпадающем списке для конкретной записи. Но кажется, что при использовании следующих кодов, когда обновляется только 1 его запись, она работает, но когда существует несколько записей, она не будет выполнена. Нужна помощь! Заранее спасибо.

Образец кода:

new ListView("list", getItemList()) {
    protected void populateItem(ListItem item) {
        final Sl qv = (Sl) item.getModelObject();
        item.setModel(new CompoundPropertyModel(qv));

        ratio = new TextField("ratio");
        item.add(ratio);
        ratio.setOutputMarkupId(true);

        ratio.add(new AjaxFormComponentUpdatingBehavior("onkeyup") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                getProperties().put("rating" + Sl.getid(), "Strong");
                target.addComponent(rating);
            }
        });

        rating = new DropDownChoice("rating", getDdlmodels().get(item.getIndex()), ratingList);
        item.add(rating);
        rating.setOutputMarkupId(true);
    }
}

Примечание. PropertyModel со свойствами ValueMap в качестве ключа (DdlModels) используется для получения и установки значения раскрывающегося выбора. После изменения текстового поля свойство propertyModel было обновлено, однако выпадающий выбор не обновлялся и не перерисовывался, хотя я добавил его для обновления ajax.

1 ответ

Решение

Проблема в том, что вы "привязываете" все текстовые поля к последнему "рейтингу", так как это частный член вашего класса.

Когда вызывается поведение "onUpdate", оно будет использовать элемент рейтинга, который объявлен вне области действия метода заполненного элемента, таким образом, тот, который был назначен на последней итерации списка.

Вот почему это работает для одной записи. Ваша текущая реализация должна работать только для последней "строки".

Переменная "rating" должна быть объявлена внутри метода populate item.

Другие вопросы по тегам