Domanda

Qualcuno può consigliare un quadro di riferimento per i template di formattazione dei messaggi in una applicazione stand-alone, lungo le linee di JSP EL (Expression Language)?

Mi aspetto di essere in grado di creare un'istanza di un oggetto di qualche tipo, dare un modello lungo le linee di

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

fornire un contesto che includono un valore dizionario degli oggetti di parametro (in questo caso un oggetto di tipo Cliente con un cliente 'nome', per dire, e un oggetto di tipo Ordine con il nome di 'ordine').

So che ci sono molti modelli di quadri là fuori, molte delle quali operano al di fuori del contesto dell'applicazione web, ma non vedo questo come un grande campione di pesi massimi di template framework.Solo una versione migliore del Formato base funzionalità di Java fornisce già

Per esempio, io posso realizzare il sopra con java.di testo.MessageFormat utilizzando un modello (o un "modello", come lo chiamano loro) come

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

e io posso passare un array di Oggetti, nella mia chiamata programma Java

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

Tuttavia, in questo utilizzo, il codice e il modello sono intimamente legate.Mentre ho potuto mettere il modello in una risorsa di proprietà di un file, il codice e il modello necessario conoscere i dettagli intimi su ogni altro.Con un EL-come sistema, il contratto tra il codice e il modello potrebbe essere a un livello molto più alto (ad es.cliente e dell'ordine, piuttosto cliente.nome e ordine.estimatedDispatchDate), il che rende più facile cambiare la struttura, l'ordine e il contenuto del messaggio senza modificare il codice.

È stato utile?

Soluzione

Si può semplicemente utilizzare l'Espressione Universale della Lingua stessa.Avete bisogno di un'implementazione (ma ci sono pochi da scegliere).Dopo di che, è necessario implementare tre classi:ELResolver, FunctionMapper e VariableMapper.

Questo post descrive come fare: Java:utilizzando EL al di fuori J2EE.

Altri suggerimenti

StringTemplate è un materiale più leggero alternativa per la Velocità e la Freemarker.

Vorrei raccomandare cercando in Apache Velocity.È abbastanza semplice e leggero.

Attualmente stiamo utilizzando per i nostri modelli di e-mail, e funziona molto bene.

È possibile utilizzare Casper molto simile a jsp e facile da usare : Casper

Vorrei andare per la Primavera Espressione lingua:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html

Un paio di esempi, che dimostrano la potenza (i primi due sono da documentazione):

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}'

Le espressioni possono anche utilizzare le proprietà dell'oggetto:

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 ?"

Si potrebbe desiderare di guardare OGNL quale è il tipo di raccolta che si sono dopo.OGNL può essere ragionevolmente potente, ed è l'espressione della lingua utilizzata nell' WebWork framework per il web.

Re:Jasper e Juel per 1.5:E poi ho scoperto RetroTranslator (http://retrotranslator.sourceforge.net/).Una volta retrotranslated, EL e Jasper funziona come un fascino

L'idea di utilizzare EL sé al di fuori di Java EE è stato sostenuto da Ed Burns e discusso sul Lato Server.Gattoni attuazione navi in un VASO separato ma non so se può essere utilizzato al di fuori del server.

Freemarker vorresti fare esattamente ciò che è necessario.Questo è un motore di template, con una sintassi molto simile a JSP :

http://freemarker.org/

AAh.Considerando che con MessageFormat, che posso fare

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

dove il parametro #1 è un oggetto Data e diventa formattato secondo il modello, non c'è un equivalente in EL.

In JSP, io avrei usato, forse, un formato di etichetta.In questo standalone esempio, sto andando ad avere per formattare la Data come Stringa nel mio codice prima della valutazione dell'espressione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top