StringResourceModel仅适用于标签

时间:2014-07-28 05:53:56

标签: java internationalization wicket resourcebundle

我试图在其上创建一个包含用户名的链接(即动态数据),并且无法让StringResourceModelLink一起使用。
我的代码看起来像:

属性:

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一起使用?

2 个答案:

答案 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>

我完全不记得语法,现在无法尝试,但无论如何它都会对你有帮助。