6 Stimmen

Laden von GWT-Nachrichten aus einer Datenbank

In GWT lädt man i18n-Strings typischerweise über eine Schnittstelle wie diese:

public interface StatusMessage extends Messages {
   String error(String username);
   :
}

die dann die eigentlichen Zeichenketten aus einer StatusMessage.property Datei:

error=User: {0} does not have access to resource

Dies ist eine großartige Lösung, aber mein Kunde ist unnachgiebig in seiner Forderung, die i18n-Zeichenfolgen in einer Datenbank zu speichern, damit sie zur Laufzeit geändert werden können (obwohl es keine Voraussetzung ist, dass sie in Echtzeit geändert werden).

Eine Lösung besteht darin, einen asynchronen Dienst zu erstellen, der eine Nachrichten-ID et Gebietsschema des Benutzers und gibt eine Zeichenkette zurück. Ich habe dies implementiert und finde es furchtbar hässlich (es führt eine riesige Menge an zusätzlicher Kommunikation mit dem Server, plus es macht Eigenschaft Platzhalter Ersatz ziemlich kompliziert).

Meine Frage lautet also: Kann ich in einigen nette Art einen benutzerdefinierten Nachrichtenprovider zu implementieren, der die Nachrichten aus dem Backend in einem großen Schwung lädt (für die aktuelle Benutzersitzung). Wenn es auch in den Standard-GWT-Nachrichten-Mechanismus einhaken kann, dann würde ich völlig glücklich sein (d.h. so kann ich eine Schnittstelle wie oben erstellen und halten mit der netten {0}, {1}... Ersetzungsformat der Eigenschaft).

Andere Vorschläge für saubere datenbankgestützte Meldungen in GWT sind ebenfalls willkommen.

3voto

Sripathi Krishnan Punkte 30024

GWTs eingebautes Wörterbuch Klasse ist der beste Weg, um voranzukommen. Hier ist die offizielle Dokumentation wie es zu verwenden ist.

1voto

Angenommen, Ihre Anwendung hat 500 Nachrichten pro Gebietsschema mit durchschnittlich 60 Zeichen pro Nachricht. Ich würde mir keine Gedanken darüber machen, alle diese Nachrichten zu laden, wenn sich der Benutzer anmeldet oder seine Sprache auswählt: Es sind <50k Daten und sollten kein Problem darstellen, wenn Sie davon ausgehen können, dass eine Breitbandverbindung verfügbar ist... Ihr Vorschlag "auf einen Schlag". Ich mache das bereits in einer GWT-Anwendung, obwohl es sich nicht um Nachrichten, sondern um Eigenschaften handelt, die aus der Datenbank gelesen werden.

1voto

markovuksanovic Punkte 15096

Ich denke, dieser Artikel könnte für Sie nützlich sein: http://googlewebtoolkit.blogspot.com/2010/02/putting-test-data-in-its-place.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/NWLT+(Google+Web+Toolkit+Blog)&utm_content=Google+Reader

Sie könnten eine TextResource einrichten und dann den Text einfach zur Laufzeit ändern. Ich habe dies nicht versucht, aber ich bin sehr zuversichtlich, dass dies funktionieren würde.

0voto

Dzung BUI Punkte 158

Um die Leistung zu optimieren, können Sie Ihre Nachrichten z. B. in eine js-Ressource stellen: http://host.com/app/js/messages.js?lang=en Diese Ressource wird dann einem Servlet zugeordnet, das das Nachrichtenwörterbuch aus Ihrem Cache (z. B. einer Singleton-Bean) entnimmt und in die Antwort schreibt.

Um noch mehr zu optimieren, können Sie:
- fügen Sie der URL der Ressource einen Parameter hinzu, zum Beispiel: .../messages.js?lang=de&version={letztes Aktualisierungsdatum der Nachrichten}
- {letztes Aktualisierungsdatum der Nachrichten} ist irgendwo in der DB gespeichert
- wenn der Benutzer die Nachrichten aktualisiert, ändert sich das {letzte Aktualisierungsdatum der Nachrichten}
- in der Antwort an den Browser setzen Sie Cache-control, um dem Browser mitzuteilen, dass er Ihre Nachrichten zwischenspeichern soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X