当前位置: 首页 > 知识库问答 >
问题:

更新多次使用的标签

东门清夷
2023-03-14

我有一个标签,这是使用了多次在我的网页。它工作得很好,直到我尝试按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"/>
    &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个不同的标签实例与相同的文本内容。

共有1个答案

公孙辰龙
2023-03-14

问题的根源在于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);
    }
}

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

 类似资料:
  • 我正在尝试用杜松子酒和戈尔姆酒制作API。现在我已经插入了一个API。这个API将在数据库中创建多个条目。我有这样的json体。数组的大小会有所不同。 这样,我就有了从url获取的其他参数- 现在我想在DB上创建多个条目[1,2],其中包含key1和key2的数据,如- 我陷入了困境,不知道如何阅读这个json并将数据保存在我的模式(struct)中,以创建多个条目,如- 请引导我找到一个可能的解

  • 我一直在寻找一个使用可重用模型对话框窗口的解决方案,但在那里我可以自由地使用内容,并在React中使用了高级组件模式。如下所述:https://stackoverflow.com/a/31564812. 虽然这最初似乎是可行的,但当我使用一个包装器包装不同的东西(在不同的时间)时,我会遇到麻烦。 首先,我要: 然后我做了: 和 然后我得到的是这两个组件共享它们的状态。当一个被定义时,另一个将显示与

  • 问题内容: 我想更新表的所有字段的值为“ PCNAME”。我要更新的表名是XYZ。我只想更新一些字段而不保留一些不变。 这会影响很多行而不是一行,因为会有很多行带有NAME =’PCNAME’。我如何使用JPA做到这一点。我有与此表关联的实体类。 问题答案: 您既可以采用面向对象的方式,也可以使用更新查询。 面向对象: 使用更新查询(未试用): 显然,第二个版本的性能更好。

  • 问题内容: 此代码示例属于Stopwatch类的一部分,该类属于一个较大的项目的一部分,该更大的项目的目的是成为模仿Android Clock的桌面gui应用。我具有秒,分钟,小时等标签,这些标签应该从计时器任务内部的无限while循环中更新,而该计时器任务在布尔状态为true时运行。while循环应该实时更新GUI标签。我让计时器任务每毫秒执行一次。为什么我的GUI在程序更新第一个Label后立

  • 问题内容: 我在使用Tkinter和PIL更新标签时遇到了一个“小”问题。 当我按下起 司 按钮时,它应该显示foo2,但是它只显示白色屏幕。有什么建议? 这是我的代码: 问题答案: 好吧,我认为原因是当您按下按钮时。这是因为此行: 应该: 出现这种情况,是因为,等回报。