使用参数解析消息

时间:2014-06-11 19:13:05

标签: grails

我在使用g.message标记解析Grails消息时发现了一些奇怪的行为。在我的属性文件中,我已定义此消息:

deleted={0} has been deleted

如果我解决此问题:

Long id = 1878L
message(code: 'festival.deleted', args: [id.toString()])

结果是:

  

1878年已被删除

这是我所期待的。但是,如果我用以下方法解决它:

Long id = 1878L
message(code: 'festival.deleted', args: [id])

结果是:

  

1,878已被删除

我不清楚为什么这个数字被格式化为" 1,878"在它被替换成消息之前。我想也许toString()会在所有消息参数上被调用,如果它们不是String类型的,但这似乎并不能解释这种行为,因为

id.toString() == "1878"

1 个答案:

答案 0 :(得分:2)

g.message标记使用Java MessageFormat生成文本输出。如果未指定参数格式,MessageFormat有几种默认的格式化参数的方法。 {0} has been deleted说有一个论点,但没有说明如何格式化。

如果参数是String,则将字符串插入到消息中。如果参数是数字,则使用NumberFormat

groovy:000> NumberFormat.getInstance().format(1878L)
===> 1,878

format()的文档中有一个很好的表格可以打破在什么情况下发生的事情。如果您想在不调用toString()的情况下使用Long作为参数,则可以将参数更改为{0,number,#},这相当于

groovy:000> new DecimalFormat("#", DecimalFormatSymbols.getInstance()).format(1878L)
===> 1878