문제

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.firstName 및 order.estimatedDispatchDate 대신 고객 및 주문)을 사용하면 코드를 변경하지 않고도 메시지의 구조, 순서 및 내용을 더 쉽게 변경할 수 있습니다.

도움이 되었습니까?

해결책

Universal Expression Language 자체를 사용할 수 있습니다.구현이 필요합니다(그러나 선택할 수 있는 것이 몇 가지 있습니다).그런 다음 세 가지 클래스를 구현해야 합니다.ELResolver, FunctionMapper 및 VariableMapper.

이 블로그 게시물에서는 이를 수행하는 방법을 설명합니다. 자바:J2EE 외부에서 EL 사용.

다른 팁

문자열템플릿 Velocity 및 Freemarker에 대한 보다 가벼운 대안입니다.

나는 조사하는 것이 좋습니다 아파치 속도.상당히 간단하고 가볍습니다.

우리는 현재 이메일 템플릿에 이를 사용하고 있으며 매우 잘 작동합니다.

jsp와 매우 유사하고 사용하기 쉬운 Casper를 사용할 수 있습니다. 캐스퍼

나는 Spring Expression 언어를 사용하겠습니다.

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 이것이 당신이 추구하는 종류의 도서관입니다.OGNL은 합리적으로 강력할 수 있으며 OGNL에서 사용되는 표현 언어입니다. 웹워크 웹 프레임워크.

답장:Jasper와 Juel은 1.5용으로 제작되었습니다.그러다가 RetroTranslator(http://retrotranslator.sourceforge.net/).일단 역번역하면 EL과 Jasper는 매력처럼 작동합니다

Java EE 외부에서 EL 자체를 사용한다는 아이디어는 에드 번즈(Ed Burns)가 옹호한 그리고 서버 측에서 논의됨.톰캣 구현 별도의 JAR로 배송됩니다. 하지만 서버 외부에서도 사용할 수 있는지는 모르겠습니다.

Freemarker는 귀하가 필요로 하는 것을 정확하게 수행할 것입니다.이는 JSP와 매우 유사한 구문을 가진 템플릿 엔진입니다.

http://freemarker.org/

아아.MessageFormat을 사용하면 할 수 있습니다.

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

여기서 매개변수 #1은 Date 객체이고 패턴에 따라 형식이 지정되며 EL에는 이에 상응하는 객체가 없습니다.

JSP에서는 아마도 형식 태그를 사용했을 것입니다.이 독립형 예제에서는 표현식을 평가하기 전에 코드에서 날짜를 문자열로 형식화해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top