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タグでグリッド名を動的に変更しようとしました。だから私はで使用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" .... />

ご覧のとおり、余分なループといくつかのダミー プロパティが必要です。

もっと良い方法はありますか?!

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 に答える