JSTL/JSP EL (язык выражений) в контексте, отличном от JSP (автономного)

StackOverflow https://stackoverflow.com/questions/91692

  •  01-07-2019
  •  | 
  •  

Вопрос

Может ли кто-нибудь порекомендовать платформу для создания шаблонов / форматирования сообщений в автономном приложении в соответствии с JSP EL (Expression Language)?

Я бы ожидал, что смогу создать экземпляр какого-либо объекта, предоставить ему шаблон в соответствии с

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

предоставьте ему контекст, который включал бы словарь значений объектов параметров (в данном случае, объект типа Customer с именем 'customer', скажем, и объект типа Order с именем 'order').

Я знаю, что существует множество фреймворков шаблонов, многие из которых работают вне контекста веб-приложения, но я не рассматриваю этот фреймворк как большой тяжеловесный фреймворк шаблонов.Просто улучшенная версия базовой функциональности формата сообщений, которую уже предоставляет Java

Например, я могу выполнить вышеизложенное с помощью java.text.MessageFormat, используя шаблон (или "шаблон", как они его называют), такой как

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

и я могу передать ему массив объектов в моей вызывающей Java-программе

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

Однако при таком использовании код и шаблон тесно связаны.Хотя я мог бы поместить шаблон в файл свойств ресурса, код и шаблон должны знать интимные подробности друг о друге.С EL-подобной системой контракт между кодом и шаблоном был бы на гораздо более высоком уровне (напримерcustomer и order, а не customer.FirstName и order.estimatedDispatchDate), что упрощает изменение структуры, порядка и содержимого сообщения без изменения какого-либо кода.

Это было полезно?

Решение

Вы можете просто использовать сам Универсальный язык выражений.Вам нужна реализация (но есть несколько вариантов на выбор).После этого вам нужно реализовать три класса:ELResolver, FunctionMapper и VariableMapper.

В этом сообщении в блоге описано, как это сделать: Java:использование EL вне J2EE.

Другие советы

StringTemplate ( Шаблон строки ) является более легкой альтернативой Velocity и Freemarker.

Я бы рекомендовал изучить Скорость Apache.Это довольно простой и легкий способ.

В настоящее время мы используем его для наших шаблонов электронной почты, и он работает очень хорошо.

Вы можете использовать Casper, очень похожий на jsp и простой в использовании : Каспер

Я бы выбрал язык весенних выражений:

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

Несколько примеров, демонстрирующих эту мощь (первые два взяты из документации):

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

Выражения также могут использовать свойства объекта:

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

Возможно, вы захотите взглянуть на ВНЛ это именно та библиотека, которая вам нужна.OGNL может быть достаточно мощным и является языком выражений, используемым в Веб-работа веб-фреймворк.

Ре:Джаспер и Джуэл строятся за 1,5:А потом я открыл для себя РетроПереводчик (http://retrotranslator.sourceforge.net/).После ретроперевода "ЭЛЬ и Джаспер" действуют как заклинание

Идея использования EL самого по себе вне Java EE заключалась в защищен Эдом Бернсом и обсуждается на Стороне сервера.Внедрение Tomcats переложите в отдельную БАНКУ но я не знаю, можно ли его использовать вне сервера.

Freemarker сделает именно то, что вам нужно.Это шаблонизатор с синтаксисом, очень похожим на JSP :

http://freemarker.org/

ААа.Принимая во внимание, что с MessageFormat я могу сделать

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

где параметр # 1 является объектом Date и он форматируется в соответствии с шаблоном, эквивалента в EL нет.

В JSP я бы использовал, возможно, тег format .В этом отдельном примере мне нужно будет отформатировать дату в виде строки в моем коде перед вычислением выражения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top