2015-01-15 5 views
0

freemarker에서 변수의 클래스 유형을 가져오고 싶습니다. var.class.simpleName; 하지만 var가 Map 인 경우 freemarker는 클래스를 var로 값을 찾기위한 키로 처리합니다. 예외가 발생합니다. 내가 어떻게 할 수 있니? 어떤 제안에 감사드립니다.FreeMarker에서지도 클래스 가져 오기

+0

해결되었으므로 BeansWrapper를 사용하여'setObjectWrapper'를 수정해야합니다. \t \t 구성 config = new Configuration(); // config.setObjectWrapper (새 DefaultObjectWrapper()); config.setObjectWrapper (새 BeansWrapper()); – nealons

+0

그리고 모든 평소의'지도'검색을 망쳤습니다 ... 간단히 말해서, 나는 이것을 아무에게도 추천하지 않습니다. – ddekany

답변

1

먼저 FreeMarker 템플릿은 varMap인데도 알 수 없기 때문에 왜 그런지 묻는 것이 좋습니다. 데이터 모델이 템플릿에 필요한 것이 아닐 수도 있습니다.

어쨌든, 지금은 TemplateMethodModelEx을 쓸 것입니다.이 용도로 사용할 수있는 것은 ${classOf(var)}입니다. TemplateMethodModelEx 구현 내에서 인수 값으로 TemplateModel을 수신 한 다음 AdapterTemplateModel인지 확인할 수 있습니다. 그렇다면 원래 개체를 가져 와서 클래스를 가져올 수 있습니다. (AdapterTemplateModel이 아닌 경우에는 래핑 된 Java 객체가 아니기 때문에 원래 객체의 클래스를 묻는 것은 의미가 없습니다.)(incompatibleImprovements)은 2.3보다 작게 설정됩니다. 22는 AdapterTemplateModelMap -s ...로 감싸지 않습니다. 따라서 2.3.21에서는 여전히 BeansWrapper을 사용해야하지만 적어도 simpleMapWrappertrue으로 설정할 수 있습니다.

2.3.22에서 실제로는 ${var?api.class}을 작성할 수 있습니다 ... 야간 빌드를 사용할 수도 있습니다. 비즈니스 클래스의 기본 유형이 Map이기 때문에 비즈니스 메소드에 액세스 할 수없는 경우에만 문제를 해결할 수 있습니다.