3

考虑到我有一个必须在网格中显示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标签中的网格名称。所以我用getTextgridColumn

<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" .... />

如您所见,我需要额外的循环和一些虚拟属性。

有没有更好的办法?!

4

1 回答 1

1

bankName您将从向类中添加一个属性开始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资源包中的值。

一旦你翻译了一个数据模型,你就可以在网格中使用它。

于 2016-05-30T20:57:37.473 回答