考虑我有一个List
AccountVO
对象,必须在网格中显示
AccountVO{
bankCode; //which could be HSB,CITY
amout;
...
}
在资源包中我有
bank.name.HSB = The HSB Bank
bank.name.CITY = The CITY Bank
......
bank.name.HSB = بانک اچ اس بی
bank.name.CITY = بانک شهر
我尝试动态更改gridColumn
标记中的网格名称。所以我在getText
gridColumn
<sjg:gridColumn name="%{getText('bank.name.'+bankCode)}" .... />
它不起作用。
当我看到下面找到的生成代码时:
options_gridtable_colmodels_بانک شهر = {};
options_gridtable_colmodels_بانک شهر.name = "بانک شهر";
options_gridtable_colmodels_بانک شهر.jsonmap = "بانک شهر";
正如您所看到的,javascript变量现在包含了i18n名称,这是不正确的。
要解决此问题,我会使用getText
。例如:
for(List<Account>: account ){
account.setI18nBankName( getText('bank.name.'+ account.getBankCode() ) );
}
现在我可以使用:
<sjg:gridColumn name="i18nBankName" .... />
正如你所看到的,我需要额外的循环和一些虚拟属性。
有更好的方法吗?!
答案 0 :(得分:1)
您首先要将属性bankName
(由@DaveNewton建议)添加到AccountVO
类。
class AccountVO{
String bankCode; //which could be HSB,CITY
String bankName;
Float amount;
...
}
此属性应具有网格中使用的数据的已转换值。您不需要在JSP或JS代码中转换此数据,因为此逻辑仅属于控制器。最初它可以包含bank.name
之类的密钥,然后将其转换为从资源包中获取的实际值。
如果使用消息格式
,可以简化冗余消息bank.name = The {1} Bank
然后您可以使用参数getText()
。
如果您不能使用参数化消息,请保持原样,并使用资源包中的值替换属性bankName
中的消息密钥。
翻译完数据模型后,您可以在网格中使用它。