3

Man bedenke, dass ich ein List von AccountVO bezwecken dieWie getText in Grid-Namen von Struts 2 jquery Raster verwenden pluing

AccountVO{ 
    bankCode; //which could be HSB,CITY 
    amout; 
    ... 
} 

In Ressourcenbündel in Raster angezeigt werden, muss ich

bank.name.HSB = The HSB Bank 
bank.name.CITY = The CITY Bank 
...... 
bank.name.HSB = بانک اچ اس بی 
bank.name.CITY = بانک شهر 

haben Ich habe versucht, den Grid-Namen in gridColumn Tag dynamisch zu ändern. so habe ich getText in gridColumn

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

Es funktionierte nicht.

Wenn ich den generierten Code zu sehen finde ich unten:

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

Wie Sie die JavaScript-Variablen jetzt die i18n Namen haben in ihnen sehen kann, was nicht korrekt ist.

Um dies zu lösen, verwende ich getText in Aktion. Zum Beispiel:

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

Jetzt kann ich verwenden:

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

Wie Sie ich brauche zusätzliche Schleife und eine Dummy-Eigenschaft zu sehen.

Gibt es einen besseren Weg ?!

+0

Der bessere Weg ist, einen Builder auf das Modell anzuwenden und Schlüssel mit den tatsächlichen Namen zu ersetzen. Sie müssen sich viel Mühe beim Schreiben eines Builders geben, der verwendet wird, um Modellvariablevariablen für die bereitgestellten Nachrichtenformate zu durchlaufen. –

+0

Haben Sie versucht, die 'Bezeichnung' anstelle des' Namens' zu setzen? –

+0

@DaveNewton, ich habe das gleiche Problem. name ist obligatorisch für gridColumn und die einstellung der label hilft mir nicht. – Sima

Antwort

1

Sie würden mit dem Hinzufügen einer Eigenschaft bankName (wie von @DaveNewton vorgeschlagen) zur Klasse AccountVO beginnen.

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

Diese Eigenschaft sollte im Raster verwendet Wert für die Daten übersetzt haben. Sie müssen diese Daten nicht in JSP- oder JS-Code übersetzen, da diese Logik ausschließlich zu einem Controller gehört. Anfangs kann es einen Schlüssel wie bank.name enthalten und dann auf den tatsächlichen Wert aus dem Ressourcenbündel übertragen.

Die redundanten Nachrichten vereinfacht werden könnte, wenn Sie ein Nachrichtenformat

bank.name = The {1} Bank 

Dann können Sie einen Parameter getText() verwenden.

Wenn Sie parametrisierte Nachrichten nicht verwenden können, behalten Sie sie unverändert bei und ersetzen Sie einen Nachrichtenschlüssel in der Eigenschaft bankName durch den Wert aus dem Ressourcenbündel.

Sobald Sie ein Datenmodell übersetzt haben, können Sie es im Raster verwenden.