Pregunta

¿Alguien puede recomendar un marco para la creación de plantillas/formato de mensajes en una aplicación independiente a lo largo de las líneas de la JSP de EL (Lenguaje de Expresión)?

Yo esperaría a ser capaz de crear una instancia de un objeto de algún tipo, darle una plantilla a lo largo de las líneas de

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

proporcionar un contexto que incluyen un valor diccionario de objetos de parámetro (en este caso un objeto de tipo Cliente con un nombre de "el cliente", dicen, y un objeto de tipo Orden con el nombre de 'orden').

Sé que hay muchos de la plantilla de marcos hay - muchos de los cuales trabajan fuera del contexto de aplicación web, pero no veo esto como un gran peso pesado de las plantillas de marco.Solo una mejor versión de los básicos de Formato de Mensaje de la funcionalidad de Java, ya ofrece

Por ejemplo, yo puedo lograr lo anterior con java.texto.MessageFormat mediante el uso de una plantilla (o un 'patrón' como ellos lo llaman), tales como

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

y me puede pasar un array de Objetos, en mi llamado programa de Java

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

Sin embargo, en este uso, el código y el diseño están íntimamente ligados.Mientras me podría poner el patrón de un recurso de propiedades del archivo, el código y el patrón necesita saber los detalles íntimos acerca de cada uno de los otros.Con EL sistema, el contrato entre el código y el patrón sería en un nivel mucho más alto (por ejemplo,el cliente y el orden, sino el cliente.el nombre y el orden.estimatedDispatchDate), lo que es más fácil cambiar la estructura, el orden y el contenido del mensaje sin cambiar ningún código.

¿Fue útil?

Solución

Puedes usar el Universal Lenguaje de Expresión de sí mismo.Usted necesita una aplicación (aunque hay varios para elegir).Después de eso, usted necesita para implementar tres clases:ELResolver, FunctionMapper y VariableMapper.

Este blog describe cómo hacerlo: Java:utilizando EL exterior J2EE.

Otros consejos

StringTemplate es una más ligera alternativa a la Velocidad y Freemarker.

Yo recomendaría buscar en Apache Velocity.Es muy sencillo y ligero.

Actualmente estamos utilizando nuestras plantillas de correo electrónico, y funciona muy bien.

Usted puede utilizar Casper muy similar a jsp y fácil de usar : Casper

Yo iría por la Primavera del lenguaje de la Expresión:

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

Un par de ejemplos que demuestran el poder (los dos primeros son de la documentación):

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

Las expresiones también pueden utilizar las propiedades de los objetos:

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

Es posible que desee buscar en OGNL cual es el tipo de biblioteca que está después.OGNL puede ser razonablemente potente, y es el lenguaje de la expresión utilizada en el Entramado framework web.

Re:Jasper y Juel siendo construido por 1.5:Y entonces descubrí RetroTranslator (http://retrotranslator.sourceforge.net/).Una vez retrotranslated, EL y Jasper funciona como un encanto

La idea de usar EL mismo fuera de Java EE se abogó por Ed Burns y discutido en El Lado del Servidor.Juerga de solteros aplicación naves en un FRASCO separado pero no sé si puede ser utilizado fuera del servidor.

Freemarker haría exactamente lo que usted necesita.Este es un motor de plantillas con una sintaxis muy similar a JSP :

http://freemarker.org/

AAh.Mientras que con MessageFormat, que puedo hacer

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

donde el parámetro #1 es un objeto Date y se formatea de acuerdo con el patrón, no hay ningún equivalente en EL.

En JSP, yo habría usado, tal vez, un formato de etiqueta.En este autónomo ejemplo, voy a tener que formatear la Fecha como una Cadena en mi código antes de evaluar la expresión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top