更新多次使用的标签(Update a label which used multiple times)

编程入门 行业动态 更新时间:2024-10-20 09:24:22
更新多次使用的标签(Update a label which used multiple times)

我有一个标签,在我的页面中使用了很多次。 它工作正常,直到我尝试更新每个ajax标签。 结果:仅更新第一个标签。 这是一个已知的问题吗? 我不确定,因为我无法打开JIRA页面: https ://issues.apache.org/jira/browse/wicket(所有时间都可以获得throbber)。 我正在使用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"/> &ltspan wicket:id="yourLabel"/> &ltspan wicket:id="yourLabel"/> &ltspan 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); } }

=>只有第一个标签得到更新。 我有一个解决方法,通过添加4个不同的标签实例和相同的文本内容。

I have a label which is used mutiple times in my page. It works fine, until I try to update the label per ajax. Result: only the first label gets updated. Is it a known issue? I'm not sure, since I can't open the JIRA page: https://issues.apache.org/jira/browse/wicket (Get throbber all time). I'm using wicket version 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"/> &ltspan wicket:id="yourLabel"/> &ltspan wicket:id="yourLabel"/> &ltspan 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); } }

=> only the first label gets updated. I have a workaround for this by adding 4 different instances of label with the same text content.

最满意答案

问题的根源是Wicket组件不应该多次使用 - 组件代表页面上的单个项目。 添加四个不同的 Label对象(您的解决方法)是正确的。

如果四个标签始终具有相同的内容,但该内容有时会发生变化,则可以通过让四个标签共享一个可写字符串模型来明确这一点。 这是一些伪代码:

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

或者,您可以通过创建Label的子类来进一步封装内容,该子类实现onEvent方法本身并调整其自己的文本。

The root of the problem is that Wicket components are not supposed to be used multiple times - a Component represents an individual item on the page. Adding four different Label objects (your workaround) is correct.

If the four labels will always have the same content, but that content sometimes changes, you can make this clear by having the four Labels share a single writable string Model. Here's some pseudocode:

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

Alternatively, you could encapsulate things even further by making a subclass of Label that implements the onEvent method itself and adjusts its own text.

更多推荐

本文发布于:2023-08-06 08:18:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1446064.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:标签   Update   label   multiple   times

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!