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