首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用参数解析消息

用参数解析消息
EN

Stack Overflow用户
提问于 2014-06-11 19:13:04
回答 1查看 594关注 0票数 3

在使用g.message标记解析Grails消息时,我注意到了一些奇怪的行为。在我的属性文件中,我定义了以下消息:

代码语言:javascript
复制
deleted={0} has been deleted

如果我用以下方式解决这个问题:

代码语言:javascript
复制
Long id = 1878L
message(code: 'festival.deleted', args: [id.toString()])

结果是:

一八七八年已被删除

这正是我所期望的。但是,如果我用以下方法解决这个问题:

代码语言:javascript
复制
Long id = 1878L
message(code: 'festival.deleted', args: [id])

结果是:

1,878已被删除

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

代码语言:javascript
复制
id.toString() == "1878"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 20:17:15

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

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

代码语言:javascript
复制
groovy:000> NumberFormat.getInstance().format(1878L)
===> 1,878

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

代码语言:javascript
复制
groovy:000> new DecimalFormat("#", DecimalFormatSymbols.getInstance()).format(1878L)
===> 1878
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24170819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档