Grails如何将camelCase驼峰命名转换为用户友好的展示标题?
Grails 驼峰属性名转可读标题的实现方法
底层逻辑说明
你在<f:table>标签中观察到的驼峰转标题的能力,来自Grails Fields插件的内置逻辑,核心是Grails官方提供的字符串处理工具类实现,无需自行编写正则拆分规则。
可直接使用的实现方案
方案1:调用内置工具类(最简实现,和默认转换效果完全一致)
Grails 自带grails.web.util.GrailsStringUtils.splitCamelCase()方法,原生支持将驼峰字符串拆分为空格分隔的可读标题,自动大写每个单词的首字母:
- GSP 视图中直接使用示例:
${grails.web.util.GrailsStringUtils.splitCamelCase('userName')}
上述代码输出结果为 User Name,和<f:table>的默认展示效果完全相同。
- 后端Groovy代码中使用示例:
import grails.web.util.GrailsStringUtils def header = GrailsStringUtils.splitCamelCase("customerAddress") // 输出结果:Customer Address
方案2:对齐<f:table>完整逻辑(支持国际化)
如果需要完全复刻<f:table>的处理逻辑(优先读取域类属性对应的国际化配置,无配置时再走驼峰拆分),可以配合<g:message>标签实现:
<g:message code="你的域类名小写.属性名" default="${grails.web.util.GrailsStringUtils.splitCamelCase('属性名')}" />
示例(对应User域类的userName属性):
<g:message code="user.userName" default="${grails.web.util.GrailsStringUtils.splitCamelCase('userName')}" />
如果messages.properties中配置了user.userName=用户姓名,会优先显示配置的国际化内容,没有配置则默认显示User Name。
可选优化:自定义标签简化调用
如果需要频繁使用该能力,可以封装自定义GSP标签减少重复代码:
- 在
grails-app/taglib目录下创建标签类:
class CommonTagLib { static namespace = "common" def camelToHeader = { attrs -> out << grails.web.util.GrailsStringUtils.splitCamelCase(attrs.content) } }
- 视图中直接调用:
<common:camelToHeader content="orderId" /> <!-- 输出结果:Order Id -->
内容的提问来源于stack exchange,提问作者magdziarek
相关产品推荐
相关产品推荐

