Как использовать 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 со значением из пакета ресурсов.

Как только вы переведете модель данных, вы сможете использовать ее в сетке.

Другие вопросы по тегам