java - 从 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 构造函数中的“内容”变量。任何想法如何做到这一点?
解决方案
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);
}
}
- 这个想法是为
content
. 在 Wicket 中,这是模型 (IModel
)。 - 单击链接后,您将更新模型
- 要更新标签,您需要将其添加到 AjaxRequestTarget。
- 不要忘记通过调用 Label Ajax 使其可
.setOutputMarkupId(true)
更新 - 通过使用
target.appendJavaScript(CharSequence)
,您可以将新计算的内容发送content
到浏览器
推荐阅读
- asp.net - IIS 上的 ASP.NET 重写重定向 url(用于 Facebook 社交登录)
- python - 选择数据框中的特定列并追加到新行中
- java - 我显示的 GUI 大小不一致
- ruby-on-rails - 如何在 Rails 中使用 I18n.js 和 handlebars.js
- swift - 在 Userdefaults 中保存状态
- javascript - 在加载 CGI 脚本之前等待页面加载?
- visual-studio-code - VS Code:如何水平移动选择
- google-cloud-functions - Fastify 和云功能
- javascript - 如何从主要的 Angular 组件设置 html 和 body 的样式?
- wordpress - woocommerce 和 printful 集成