在 Wicket 中使用参数化 UI 消息的简单方法?
Wicket 有一个灵活的国际化系统,它支持在许多中参数化 UI 消息方法.有例子,例如在 StringResourceModel javadocs,比如这样:
Wicket has a flexible internationalisation system that supports parameterising UI messages in many ways. There are examples e.g. in StringResourceModel javadocs, such as this:
WeatherStation ws = new WeatherStation();
add(new Label("weatherMessage", new StringResourceModel(
"weather.${currentStatus}", this, new Model<String>(ws)));
但我想要一些真正简单的东西,但找不到很好的例子.
But I want something really simple, and couldn't find a good example of that.
考虑 .properties 文件中的这种 UI 消息:
Consider this kind of UI message in a .properties file:
msg=Value is {0}
具体来说,我不想仅仅为了这个目的而创建一个模型对象(使用 getter 来替换值;如上例中的 WeatherStation).如果我已经有局部变量中的值,那就太过分了,否则就不需要这样的对象.
Specifically, I wouldn't want to create a model object (with getters for the values to be replaced; like WeatherStation in the above example) only for this purpose. That's just overkill if I already have the values in local variables, and there is otherwise no need for such object.
这是用正确的值替换 {0} 的一种愚蠢的蛮力"方法:
Here's a stupid "brute force" way to replace the {0} with the right value:
String value = ... // contains the dynamic value to use
add(new Label("message", getString("msg").replaceAll("\{0\}", value)));
有没有更干净、更 Wicket-y 的方式来做到这一点(不会比上面的长得多)?
Is there a clean, more Wicket-y way to do this (that isn't awfully much longer than the above)?
推荐答案
我认为最一致的WICKETY方式可以通过改进Jonik 的回答 MessageFormat
:
I think the most consistent WICKETY way could be accomplished by improving Jonik's answer with MessageFormat
:
.properties:
.properties:
msg=Saving record {0} with value {1}
.java:
add(new Label("label", MessageFormat.format(getString("msg"),obj1,obj2)));
//or
info(MessageFormat.format(getString("msg"),obj1,obj2));
我为什么喜欢它:
- 干净、简单的解决方案
- 使用纯 Java,别无其他
- 您可以根据需要替换任意数量的值
- 使用标签、info()、验证等.
- 它并不完全是 wickety,但它与 wicket 一致,因此您可以使用
StringResourceModel
重用这些属性.
- Clean, simple solution
- Uses plain Java and nothing else
- You can replace as many values as you want
- Work with labels, info(), validation, etc.
- It's not completely wickety but it is consistent with wicket so you may reuse these properties with
StringResourceModel
.
注意事项:
如果你想使用模型,你只需要创建一个简单的模型来覆盖模型的 toString
函数,如下所示:
if you want to use Models you simply need to create a simple model that override toString
function of the model like this:
abstract class MyModel extends AbstractReadOnlyModel{
@Override
public String toString()
{
if(getObject()==null)return "";
return getObject().toString();
}
}
并将其作为 MessageFormat
参数传递.
and pass it as MessageFormat
argument.
我不知道为什么 Wicket 在反馈消息中不支持 Model
.但如果支持,则没有理由使用这些解决方案,您可以在任何地方使用 StringResourceModel
.
I don't know why Wicket does not support Model
in feedback message. but if it was supported there was no reason to use these solutions and you could use StringResourceModel
everywhere.
相关文章