0

ユーザー言語を選択するためのコンボボックス/ドロップダウンのあるフォームがあります。ユーザーが言語を変更した場合、すべてのラベルを更新したいのですが、入力要素はそのままにしておきます。

jQuery では、JSON を介してラベル ID と新しいテキストのリストを要求し、次のようなループを使用します。

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 でこれを行うにはどうすればよいですか?

[編集]私が試したこと:

        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)));
4

1 に答える 1

1

これは間違っています:

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

Label インスタンスを「ラベル」に追加するのではなく、追加先のコンテナー (おそらく Page インスタンス) を繰り返し追加しています。メソッド「add()」は、追加されるコンポーネントを返すのではなく、コンポーネントを追加するコンテナを返します。

次のように変更してみてください。

Label label = new Label("usernameLabel", usernameLabel);
add(label);
labels.add(label);
于 2010-12-16T21:17:49.373 に答える