Как использовать getText в названии сетки Struts 2 jquery plugin 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 ответ
Вы бы начали с добавления свойства 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
со значением из пакета ресурсов.
Как только вы переведете модель данных, вы сможете использовать ее в сетке.