我试图创建一个带有用户名的链接(即动态数据),但无法使StringResourceModelLink一起使用。
我的代码如下所示:

特性:

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);

10-04 17:03