Frage

Kann mir jemand einen Rahmen für Templating / Formatierung Nachrichten in einer Standalone-Anwendung entlang der Linien der JSP-EL (Expression Language) empfehlen?

Ich würde erwarten, dass ein ein Objekt von einer Art instanziiert ihm eine Vorlage geben entlang der Linien von

Dear ${customer.firstName}. You order will be dispatched on ${order.estimatedDispatchDate}

von sie mit dem Kontext, die einen Wert Wörterbuch von Parameterobjekten (in diesem Fall ein Objekt vom Typ Kunden mit einem Namen ‚Kunden‘, sagt sie, und ein Objekt vom Typ Bestellung mit einem Namen ‚bestellt‘) umfassen würden.

Ich weiß, es gibt viele Template-Frameworks sind - von denen viele Arbeit außerhalb des Kontextes Web-Anwendung, aber ich dies nicht als große Schwergewichts-Templating Rahmen sehen. Nur eine bessere Version des Basisnachrichtenformat Funktionalität Java bereits bietet

Zum Beispiel kann ich den oben mit java.text.MessageFormat erreichen, indem unter Verwendung einer Schablone (oder ein ‚Muster‘, wie sie es nennen) wie

Dear {0}. You order will be dispatched on {1,date,EEE dd MMM yyyy}

und ich kann es ein Object-Array übergeben, in meinem Aufruf Java-Programm

new Object[] { customer.getFirstName(), order.getEstimatedDispatchDate() };

Bei dieser Verwendung sind der Code und das Muster eng miteinander verknüpft. Während ich das Muster in einer Ressourceneigenschaften Datei setzen könnte, müssen Sie den Code und die Muster intime Details über einander kennen. Mit einem EL-ähnlichen System, der Vertrag zwischen dem Code und dem Muster würde auf einem viel höheren Niveau (zB Kunden und Ordnung, eher dann Customer.FirstName und order.estimatedDispatchDate), wodurch es einfacher, die Struktur, Ordnung und Inhalte zu ändern die Nachricht, ohne Code zu ändern.

War es hilfreich?

Lösung

Sie können mit nur die Universal-Expression Language selbst. Sie müssen eine Implementierung (aber es gibt ein paar zur Auswahl). Danach müssen Sie drei Klassen implementieren. ELResolver, FunctionMapper und VariableMapper

Dieser Blog-Eintrag beschreibt, wie es zu tun: Java :. EL außerhalb J2EE mit

Andere Tipps

String ist eine leichtgewichtige Alternative zu Geschwindigkeit und Freemarker.

Ich würde empfehlen, in der Suche Apache Velocity . Es ist ganz einfach und leicht.

Wir sind derzeit für unsere E-Mail-Vorlagen, und es funktioniert sehr gut.

Sie können Casper verwenden sehr ähnlich jsp und einfach zu bedienen: Casper

Ich würde für die Frühlings-Expression language:

http: //docs.spring. io / Feder / docs / Strom / Feder-Rahmen-Referenz / html / expressions.html

Einige Beispiele, die die Leistung (die ersten beiden sind aus der Dokumentation) zeigen:

int year = (Integer) parser.parseExpression("Birthdate.Year + 1900").getValue(context);

String city = (String) parser.parseExpression("placeOfBirth.City").getValue(context);

// weekday is a String, e.g. "Mon", time is an int, e.g. 1400 or 900
{"Thu", "Fri"}.contains(weekday) and time matches '\d{4}'

Ausdrücke können auch Objekteigenschaften verwenden:

public class Data {
    private String name; // getter and setter omitted
}

Data data = new Data();
data.setName("John Doe");

ExpressionParser p = new SpelExpressionParser();
Expression e = p.parseExpression("name == 'John Doe'");
Boolean r = (Boolean) e.getValue(data); // will return true

e = p.parseExpression("Hello " + name + ", how are you ?");
String text = e.getValue(data, String.class); // text will be "Hello John Doe, how are you ?"

Sie können unter OGNL , welche die Art von Bibliothek Sie nach. OGNL kann einigermaßen mächtig sein, und ist der Ausdruck Sprache in der WebWork Web-Framework.

Re: Jasper und Juel 1,5 gebaut: Und dann entdeckte ich Retrotranslator ( http: //retrotranslator.sourceforge. net / ). Sobald retrotranslated, EL und Jasper wirkt wie ein Zauber

Die Idee der Verwendung von EL selbst außerhalb von Java EE war befürwortete von Ed brennt und auf der Server-Seite diskutiert . Tomcats Implementierung Schiffe in einem separaten JAR aber ich weiß nicht, ob es verwendet werden kann außerhalb des Servers.

Freemarker würde genau das tun, was Sie brauchen. Dies ist eine Template-Engine mit einer Syntax sehr ähnlich JSP:

http://freemarker.org/

AAh. Während bei Message, kann ich

Dear {0}. Your order will be dispatched on {1,date,EEE dd MMM yyyy}

wobei Parameter # 1 ist ein Objekt Datum und es nach dem Muster formatiert wird, gibt es keine Entsprechung in EL.

In JSP, würde ich verwendet habe, vielleicht, einen Format-Tag. In diesem Stand-alone Beispiel, ich werde das Datum als String in meinem Code die Expression vor der Auswertung müssen formatiert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top