我试图创建一个带有用户名的链接(即动态数据),但无法使StringResourceModel
与Link
一起使用。
我的代码如下所示:
特性:
some.key=User name is: {0}
Java:
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>
但是,这没有用,即文本从未被替换。
我尝试了一个不同的方向,它确实起作用了,看起来像这样:
Java:
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
一起使用? 最佳答案
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);