2008-09-18 2 views
10

JSP EL (Expression Language)의 줄을 따라 독립 실행 형 응용 프로그램에서 메시지를 템플리트/서식 지정하기위한 프레임 워크를 추천 할만한 사람이 있습니까?비 JSP (독립형) 컨텍스트의 JSTL/JSP EL (표현식 언어)

나는 어떤 종류의 객체를 인스턴스화 그것을

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

의 라인 매개 변수 개체의 값 사전을 포함 할 것 컨텍스트와 함께 제공 따라 템플릿을 줄 수 있기를 기대

(의 이 경우 고객 이름이 '고객'인 객 체 유형, 예를 들어 이름이 '주문'인 주문 유형의 오브젝트).

거기에는 많은 템플릿 프레임 워크가 있습니다. 많은 것들은 웹 어플리케이션 컨텍스트 외부에서 작동하지만, 저는 이것을 거물급 템플릿 프레임 워크로 보지 않습니다. 자바는 이미

을 제공하는 기본 메시지 형식 기능 그냥 더 나은 버전 예를 들어, 내가 템플릿 (또는 '패턴'그들이 부르는)

등을 사용하여 java.text.MessageFormat에와 위의 작업을 수행 할 수
Dear {0}. You order will be dispatched on {1,date,EEE dd MMM yyyy} 

내가

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

그러나 내 호출하는 자바 프로그램에서 그것을 객체 배열을 전달할 수 있습니다,이 사용량, 코드와 패턴이 밀접하게 연결되어 있습니다. 패턴을 리소스 속성 파일에 넣을 수는 있지만 코드와 패턴은 서로에 대한 친숙한 세부 정보를 알아야합니다. EL과 같은 시스템을 사용하면 코드와 패턴 간의 계약이 훨씬 높은 수준 (예 : customer.firstName 및 order.estimatedDispatchDate가 아닌 고객 및 주문)으로되어 구조, 순서 및 내용을 더 쉽게 변경할 수 있습니다 코드를 변경하지 않고 메시지의

답변

10

유니버설 표현 언어 자체 만 사용할 수 있습니다. 구현이 필요합니다 (그러나 선택할 수있는 몇 가지가 있습니다). 그런 다음 ELResolver, FunctionMapper 및 VariableMapper의 세 클래스를 구현해야합니다.

이 블로그 게시물은 수행 방법을 설명합니다 : Java: using EL outside J2EE.

+0

고마워. 정말 유용하게 보입니다. Java 1.4 (Jasper와 Juel 모두 1.5 용으로 컴파일 됨)를 사용하기 때문에 불행히도 MessageFormat 기반 코드를 대체하려는 시도가 실패했습니다. 이전 버전을 찾거나 소스에서 직접 JAR을 빌드하려고 시도 할 수도 있습니다. – Vihung

2

나는 Apache Velocity을 조사하는 것이 좋습니다. 아주 간단하고 가볍습니다.

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

+1

나는이 작업을하기에는 너무 무겁다. 나는 Java MessageFormat과 비교하고있다. – Vihung

1

당신이 후일 도서관의 종류 인 OGNL을보고 싶을 수도 있습니다. OGNL은 상당히 강력 할 수 있으며 WebWork 웹 프레임 워크에서 사용되는 표현 언어입니다.

0

Freemarker가 필요한 것을 정확하게 수행합니다.

http://freemarker.org/

+0

Freemarker는이 작업을하기에는 너무 무거울 것입니다 (Velocity에 대한 이전 설명 참조). Java MessageFormat – Vihung

4

StringTemplate는 속도와 프리 마커에 경량 대안 :이 JSP 매우 유사한 구문을 사용하여 템플릿 엔진이다.

1

Re : Jasper와 Juel이 1 용으로 제작되었습니다.5 : 그리고 나서 RetroTranslator (http://retrotranslator.sourceforge.net/)를 발견했습니다. 역전 된 EL 및 재스퍼는 매력처럼 작동합니다.

0

AAh. MessageFormat의 가진 반면, I 파라미터 # 1은 일 목적

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

할 수 있으며, 패턴에 따라 포맷, EL의 상응 없다 얻는다.

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

2

당신은 사용하기 매우 JSP와 유사한 쉽게 캐스퍼를 사용할 수 있습니다 Casper

2
나는 스프링 표현 언어 갈 것

:

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 ?" 
관련 문제