在使用g.message标记解析Grails消息时,我注意到了一些奇怪的行为。在我的属性文件中,我定义了以下消息:
deleted={0} has been deleted如果我用以下方式解决这个问题:
Long id = 1878L
message(code: 'festival.deleted', args: [id.toString()])结果是:
一八七八年已被删除
这正是我所期望的。但是,如果我用以下方法解决这个问题:
Long id = 1878L
message(code: 'festival.deleted', args: [id])结果是:
1,878已被删除
我不清楚为什么这个数字在被替换到消息之前被格式化为"1,878“。我想也许所有消息参数都调用了toString(),如果它们还不是String类型,但这似乎并不能解释这种行为,因为
id.toString() == "1878"发布于 2014-06-11 20:17:15
g.message标记使用MessageFormat生成文本输出。如果没有指定参数格式,MessageFormat有几种默认的格式化参数的方法。{0} has been deleted说有一个论点,但没有说如何格式化它。
如果参数是字符串,则将该字符串插入到消息中。如果参数是数字,则使用NumberFormat。
groovy:000> NumberFormat.getInstance().format(1878L)
===> 1,878format()文档中有一个很好的表,它详细分析了在什么情况下发生的事情。如果您想在不调用toString()的情况下使用Long参数,则可以将参数更改为{0,number,#},这相当于
groovy:000> new DecimalFormat("#", DecimalFormatSymbols.getInstance()).format(1878L)
===> 1878https://stackoverflow.com/questions/24170819
复制相似问题