如何在Struts 2 jquery网格的网格名称中使用getText

时间:2016-05-29 05:54:36

标签: struts2 jqgrid struts2-jquery struts2-jquery-plugin struts2-jquery-grid

考虑我有一个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" .... />

正如你所看到的,我需要额外的循环和一些虚拟属性。

有更好的方法吗?!

1 个答案:

答案 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中的消息密钥。

翻译完数据模型后,您可以在网格中使用它。