如何阻止Grails的fieldValue标签对数字进行格式化?
我之前也碰到过一模一样的情况,Grails的Fields插件默认会跟着当前区域设置来格式化数字,en_US区域下整数的千分位逗号就是标准默认行为。不过咱们可以通过几种方式来改掉这个格式化逻辑:
方法一:全局配置默认数字格式
在grails-app/conf/application.groovy里添加Fields插件的全局格式配置,指定Integer类型使用不带千分位的纯数字格式:
grails.fields.defaultFormats = [ Integer: '0' ]
这个配置会让所有用fieldValue标签渲染的Integer属性都直接输出原始数字,不会加千分位逗号。要是还有Long、BigDecimal这类其他数字类型需要同样处理,也可以一起加到这个配置集合里。
方法二:自定义字段显示模板
如果不想全局修改,只想针对特定类型或者单个字段调整,可以自定义Fields插件的模板。比如创建grails-app/views/_fields/integer/_display.gsp文件,内容就写:
${value}
这样所有Integer类型的字段在展示时(包括脚手架生成的页面)都会直接输出原始数值,跳过默认的格式化步骤。要是需要针对单个字段做定制,还可以创建更精准的模板路径,比如grails-app/views/_fields/[你的域类名]/[目标字段名]/_display.gsp。
方法三:直接输出属性值(局部场景)
如果只是少数页面需要避免格式化,也可以不用fieldValue标签,直接在GSP里输出属性的原始值:
<!-- 替换原来的<g:fieldValue bean="${bean}" field="integerProperty"/> --> ${bean.integerProperty}
这种方式最直接,适合只需要修改个别地方的场景。
另外补充一句:en_US区域的默认数字格式确实包含千分位逗号,你提到的"默认格式为'0'"可能是误解了,0是格式模式的一种,而en_US默认的数字格式对应的模式其实是#,##0,这才是逗号出现的原因。通过上面的配置就能覆盖这个默认行为啦。
内容的提问来源于stack exchange,提问作者Suneel

