【发布时间】:2010-12-16 10:11:21
【问题描述】:
我有一个带有组合框/下拉菜单的表单来选择用户语言。如果用户更改语言,我想更新所有标签但不理会输入元素。
在 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)));
【问题讨论】:
-
在这一行中:
for( MarkupContainer label : labels )什么是标签,您如何获得它? -
Labels 是页面上所有标签的列表。代码见 EDIT2。
标签: ajax forms internationalization wicket preserve