我的标签在我的页面中使用了很多次。它工作正常,直到我尝试更新每个ajax标签。结果:只有第一个标签得到更新。这是一个已知的问题吗?我不确定,因为我无法打开JIRA页面:https://issues.apache.org/jira/browse/wicket (一直悸动)。我正在使用wicket版本7.3.0
To reproduce this issue: 1. Add an label on your page (java part): private final Label label; .. label = new Label("yourLabel", "Your Text"); label.setOutputMarkupId(true); add(label); ... 1. Add your label multiple time (for e.g. 4 times) in your page (html part): ... <span wicket:id="yourLabel"/> <span wicket:id="yourLabel"/> <span wicket:id="yourLabel"/> <span wicket:id="yourLabel"/> ... 2. Add event handler for e.g. the ajax event is UpdateEvent in your page (java part) ... @Override public void onEvent(IEventevent) { if (event.getPayload() instanceof UpdateEvent) { //update your label label.setDefaultModelObject("new Text"); target.add(label); } }
=&GT;只有第一个标签得到更新。我有一个解决方法,通过添加4个不同的标签实例和相同的文本内容。
答案 0 :(得分:1)
问题的根源在于Wicket组件不应该多次使用 - 组件代表页面上的单个项目。添加四个不同的标签对象(您的解决方法)是正确的。
如果四个标签始终具有相同的内容,但该内容有时会发生变化,您可以通过让四个标签共享一个可写字符串模型来明确这一点。这是一些伪代码:
IModel<String> labelModel = new Model<String>("Your Text");
label1 = new Label("label1", labelModel);
label1.setOutputMarkupId(true);
add(label1);
label2 = new Label("label2", labelModel);
label2.setOutputMarkupId(true);
add(label2);
...
@Override
public void onEvent(IEventevent) {
if (event.getPayload() instanceof UpdateEvent) {
//update your label
labelModel.setObject("new Text");
target.add(label1);
target.add(label2);
}
}
或者,您可以通过创建实现onEvent方法本身的Label子类并调整其自己的文本来进一步封装内容。