2013-03-16 12 views

Odpowiedz

15

Jedno eleganckie rozwiązanie wykorzystuje szablony SafeHtml. Można zdefiniować wiele takich szablonów w interfejsie jak:

public interface MyTemplates extends SafeHtmlTemplates { 
    @Template("The answer is - {0}") 
    SafeHtml answer(int value); 

    @Template("...") 
    ... 
} 

a następnie wykorzystać je:

public static final MyTemplates TEMPLATES = GWT.create(MyTemplates.class); 

... 
Label label = new Label(TEMPLATES.answer(42)); 

Chociaż jest to trochę więcej pracy, aby założyć, że ma ogromną zaletę, że argumenty są automatycznie ucieka w HTML. Aby uzyskać więcej informacji, zobacz https://developers.google.com/web-toolkit/doc/latest/DevGuideSecuritySafeHtml

Jeśli chcesz pójść o krok dalej i umiędzynarodowienie wiadomości, a następnie zobaczyć również https://developers.google.com/web-toolkit/doc/latest/DevGuideI18nMessages#SafeHtmlMessages

7

można po prostu napisać własne format function zamiast robić burzę mózgów.

public static String format(final String format, final String... args,String delimiter) { 
    String[] split = format.split(delimiter);//in your case "%d" as delimeter 
    final StringBuffer buffer= new StringBuffer(); 
    for (int i= 0; i< split.length - 1; i+= 1) { 
     buffer.append(split[i]); 
     buffer.append(args[i]); 
    } 
    buffer.append(split[split.length - 1]); 
    return buffer.toString(); 
} 
+0

@downvoter dzięki za zainteresowanie moim kierunku post..please zapewnić comment.so że mogę poprawić mój odpowiedź. –

7

Ponieważ większość (jak w 99,999%) formaty wiadomości są statyczne, znany w czasie kompilacji, sposób podejścia GWT jest do analizowania ich w czasie kompilacji.

Generalnie używasz Messages subinterface, aby umiejscowić wiadomość, ale czasem będziesz potrzebować SafeHtmlTemplates.

1

można napisać własne.

Napisałem wersję, która po prostu pracować z tekstem (% s):

public static String format(final String format, final Object... args) 
{ 
    checkNotNull(format); 
    checkNotNull(args); 

    final String pattern = "%s"; 

    int start = 0, last = 0, argsIndex = 0; 
    final StringBuilder result = new StringBuilder(); 
    while ((start = format.indexOf(pattern, last)) != -1) 
    { 
     if (args.length <= argsIndex) 
     { 
      throw new IllegalArgumentException("There is more replace patterns than arguments!"); 
     } 
     result.append(format.substring(last, start)); 
     result.append(args[argsIndex++]); 

     last = start + pattern.length(); 
    } 

    if (args.length > argsIndex) 
    { 
     throw new IllegalArgumentException("There is more arguments than replace patterns!"); 
    } 

    result.append(format.substring(last)); 
    return result.toString(); 
} 
-1

nie wiem GWT dużo, ale pracuję nad projektem GWT i potrzebowałem tego. Próbując niektórych alternatyw, stwierdziłem, że to działa;

import java.text.MessageFormat; 



MessageFormat.format("The answer is - {0}", 42); 

Nie wiem, czy programiści projektu dodali coś specjalnego do tej pracy lub domyślnie działa.

+1

to jest całkowicie błędne – NimChimpsky

+0

Nieobecny w bibliotece emulacji JRE, więc nie może być użyty w kodzie klienta –

+0

To działało dla mnie tylko raz. Nie pracuję obecnie nad projektem GWT. – sedran

0

dlaczego nie pisze metody jak:

String appendAnswer(int result) { 
    return "The answer is - " + Integer.toString(result); 
} 

jest rozwiązanie problemu, ponieważ nic takiego formatowania w kodzie zrobić.

jeśli kiedykolwiek zmierzyć się z problemem jak konwersja integer/bajt HEX należy użyć:

Integer.toString(int, 16); 
Powiązane problemy