我试图在其上创建一个包含用户名的链接(即动态数据),并且无法让StringResourceModel
与Link
一起使用。
我的代码看起来像:
属性:
some.key=User name is: {0}
爪哇:
StringResourceModel model =
new StringResourceModel("some.key", this, null, new Object[] { getUserName() });
add(new Link("someid", model) {
@Override
public void onClick() {
// do something ...
}
});
HTML:
<a wicket:id="someid">some text to replace</a>
然而,这不起作用,即文本从未被替换。
我尝试了一个不同的方向,这确实有效,看起来像这样:
爪哇:
StringResourceModel model =
new StringResourceModel("some.key", this, null, new Object[] { getUserName() });
Link link;
add(link = new Link("someid") {
@Override
public void onClick() {
// do something ...
}
});
link.add(new LabeL("anotherid", model));
HTML:
<a wicket:id="someid"><span wicket:id="anotherid">some text to replace</span></a>
(属性文件相同)。
我的问题是,我是否正确地认为StringResourceModel
不适用于Link
(我称之为假设,因为我在JavaDOC中没有看到任何相关内容)?
如果没有,StringResourceModel
如何在没有调解员Link
的情况下直接与Label
一起使用?
答案 0 :(得分:2)
model
构造函数中的Link
参数并不意味着用作显示值。要设置链接的文本,您需要向其明确添加Label
:
Link<Void> link = new Link<Void>("link");
link.add(new Label("label", model);
add(link);
并在HTML中:
<a wicket:id="link"><span wicket:id="label"></span></a>
构造函数中的模型旨在用于onclick方法(或类似方法)。例如(来自JavaDoc):
IModel<MyObject> model = ...;
Link<MyObject> link = new Link<MyObject>("link", model) {
public void onClick() {
MyObject obj = getModelObject();
setResponsePage(new MyPage(obj));
}
};
add(link);
答案 1 :(得分:0)
在您的第一个示例中,您不会告诉检票口替换文本。您只需将模型应用于链接,而无需告知wicket如何处理它。 要解决此问题,您需要使用
中的内容替换HTML<a wicket:id="someid"><wicket:message key="some.key">some text to replace</wicket:message></a>
我完全不记得语法,现在无法尝试,但无论如何它都会对你有帮助。