首页 > 解决方案 > 从 Wicket 外部类中的内部 onClick 方法访问变量

问题描述

我有一个看起来像这样的课程

    private static class LinkTest extends WebMarkupContainer {
        public LinkTest(String id) {
            super(id);
            AjaxLink<Object> link = new AjaxLink<>("link") {
                @Override
                public void onClick(AjaxRequestTarget target) {
                    String content = //... some function call
                }
            };
            add(link);
            // .. how to access "content" variable here
            link.add(new Label("label", Model.of(content)));
            add(new AttributeAppender("onclick",
              new Model(format("alert('%s');", contentModel)), ";"));
        }
    }

我想访问 LinkTest 构造函数中的“内容”变量。任何想法如何做到这一点?

标签: javawicket

解决方案


private static class LinkTest extends WebMarkupContainer {
  public LinkTest(String id) {
    super(id);

    // 1
    IModel<String> contentModel = Model.of("initial value");
    AjaxLink<String> link = new AjaxLink<>("link", contentModel) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            // 2
            contentModel.setObject("a new value");

            // 3
            target.add(this.get("label"));

            // 5
            target.appendJavaScript("alert('"+contentModel.getObject()+"');");
        }
    };
    add(link);
    Label label = new Label("label", contentModel);
    link.add(label);
    //4
    label.setOutputMarkupId(true);
}

}

  1. 这个想法是为content. 在 Wicket 中,这是模型 ( IModel)。
  2. 单击链接后,您将更新模型
  3. 要更新标签,您需要将其添加到 AjaxRequestTarget。
  4. 不要忘记通过调用 Label Ajax 使其可.setOutputMarkupId(true)更新
  5. 通过使用target.appendJavaScript(CharSequence),您可以将新计算的内容发送content到浏览器

推荐阅读