2014-09-18 5 views
0

루트 맵에 설정된 값에서 비 - bean 메소드를 호출하는 방법을 묻는 질문이 많이 있습니다. 전달할 매개 변수가 표준 유형이 아닌 경우 (예 : 내가 정의한 enum (또는 해당 클래스의 다른 클래스) 일 때) 어떻게해야합니까?Freemarker 템플릿에서 비표준 클래스 인수로 메소드 호출하기

<p>${product.name}</p> 
<p>${product.normalizedDescription()}</p> 

하지만 내가 전화하고있는 방법은 내 자바 코드에서 정의한 Currency enum 걸리는 경우에 대해 :

예를 들어, 내가 하찮게 내 프리 마커 템플릿에서 다음을 수행 할 수 있습니까?

<p>${product.getPriceAsString(Currency.USD)}</p> 

서식 파일은 Currency enum을 어떻게 알 수 있으며 정의를 어디에서 찾을 수 있습니까?

답변

1

순진한 해결책은 데이터 모델에 Currency.USD (자바 열거 형 값 자체)의 값을 넣는 것입니다 (예 : "USD"). 그러면 ${product.getPriceAsString(USD)}을 쓸 수 있습니다.

물론 모든 열거 형 값을 이와 같은 데이터 모델에 넣는 것은 문제가 될 수 있습니다. 따라서 ((BeansWrapper) cfg.getObjectWrapper()).getEnumModels().get(Currency.class.getName())"Currency"이라는 이름으로 데이터 모델에 입력 한 다음 ${product.getPriceAsString(Currency.USD)}을 사용해야합니다.

당신은 한 단계 더 나아가 데이터 모델 및 <#assign Currency = enums['com.example.Currency']> 등의 작업을 수행 할 수있는 다음 템플릿에 이름 enums으로 ((BeansWrapper) cfg.getObjectWrapper()).getEnumModels()를 넣어,하지만 너무 방지 MVC 조금로 시작 할 수 있습니다.

또한 데이터 모델에 넣는 대신이 값을 공유 변수로 Configuration에 넣을 수 있습니다.

+0

고마워, 그게 효과가있다 (두 번째 방법을 사용). – markvgti

관련 문제