Калитка: Как я могу изменить текущую форму без потери существующего ввода? - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть форма с выпадающим списком / выпадающим, чтобы выбрать язык пользователя.Если пользователь меняет язык, я хотел бы обновить все метки, но оставить элементы ввода в покое.

В jQuery я бы запросил список идентификаторов меток и новые тексты через JSON, а затем использовал быцикл, подобный следующему:

var texts = {[ {id:'nameLabel', text:'First Name'}, {id:'familyLabel', text:'Family Name'} ]};
for( var i=0; i<texts.length; i++) {
    var item = texts[i];
    $('#'+item.id).text(item.text);
}

Это обновит все метки без изменения чего-либо еще.Как мне это сделать в Wicket?

[EDIT] Что я пробовал:

        DropDownChoice<Locale> ddc = new DropDownChoice<Locale>(...);
        ddc.add( new AjaxFormComponentUpdatingBehavior("onchange") {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onUpdate( AjaxRequestTarget target ) {
                getSession().setLocale( language );
                for( MarkupContainer label : labels ) {
                    target.addComponent( label );
                }
            }
        });

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

[EDIT2] Список меток создается следующим образом:

        StringResourceModel usernameLabel = new StringResourceModel("usernameLabel", this, new Model<ValueMap>(map));
        labels.add(add(new Label("usernameLabel", usernameLabel)));

1 Ответ

1 голос
/ 17 декабря 2010

Это неправильно:

labels.add(add(new Label("usernameLabel", usernameLabel)));

Вы не добавляете экземпляры Label к 'меткам', это постоянно добавляет контейнер, в который вы добавляете его (возможно, экземпляр Page). Метод add () не возвращает добавляемый компонент, он возвращает контейнер, в который вы добавляете компоненты.

Попробуйте изменить его на:

Label label = new Label("usernameLabel", usernameLabel);
add(label);
labels.add(label);
...