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

How to use getText in grid name of Struts 2 jquery grid pluing

考虑到我有一个 ListAccountVO 对象,它必须显示在网格中

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 标签中的网格名称。所以我在 gridColumn

中使用了 getText
<sjg:gridColumn name="%{getText('bank.name.'+bankCode)}" .... />

没用。

当我看到生成的代码时,我发现如下:

options_gridtable_colmodels_بانک شهر = {};
options_gridtable_colmodels_بانک شهر.name = "بانک شهر";
options_gridtable_colmodels_بانک شهر.jsonmap = "بانک شهر";

如您所见,javascript 变量现在包含国际化名称,这是不正确的。

为了解决这个问题,我使用了getText。例如:

for(List<Account>: account ){
  account.setI18nBankName(  getText('bank.name.'+ account.getBankCode() ) );
}

现在我可以使用:

<sjg:gridColumn name="i18nBankName" .... />

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

还有更好的方法吗?!

您可以先将 属性 bankName 添加到 AccountVO class。

class AccountVO{
   String bankCode; //which could be HSB,CITY
   String bankName;
   Float amount;
   ...
}

此 属性 应该具有网格中使用的数据的翻译值。您不需要在 JSP 或 JS 代码中转换此数据,因为此逻辑仅属于控制器。最初它可以包含一个键,例如 bank.name,然后将其转换为从资源包中获取的实际值。

如果使用消息格式,可以简化冗余消息

bank.name = The {1} Bank

然后你可以使用一个参数来getText()

如果您不能使用参数化消息,请保持原样并将 属性 bankName 中的消息键替换为资源包中的值。

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