比如下面的例子:
<g:formField bean="${bean}" name="foobar" value="${message(code:'x.y.foobar.' + bean.foobar}">
<g:select name="foobar" value="..." from="..." valueMessagePrefix="x.y.foobar" />
</g:formField>
属性 foobar 的显示值是基于 i18n 的,如:
x.y.foobar.1 = AAA
x.y.foobar.2 = BBB
即 foobar 的值1时,显示AAA;值为2时,显示BBB。
示例中配置 g:formField 标签 value 属性的方法显然不够简洁,写起来麻烦而且对性能也有一定影响。其实标签 g:formField 和 p:field 还有两个属性 valueI18n 和 valueI18nPrefix:
- valueI18n:如果为true,则将按照bean的类名+属性名+属性值转换为i18n后,自动设置value值。
即,如果 bean 的类名为 x.y.Zz,foobar的值为1,则转换为"x.y.Zz.foobar.1"后显示其i18n中定义的值。 - valueI18nPrefix:类似 g:select 标签中的 valueMessagePrefix,如果valueI18n无法满足要求,则可以设置本属性来转换
上面的例子简化后:
<g:formField bean="${bean}" name="foobar" valueI18n="true">
......
</g:formField>
或:
<g:formField bean="${bean}" name="foobar" valueMessagePrefix="x.y.foobar">
......
</g:formField>