2012-03-14 4 views
0

클래스 경로에서로드 된 aSpring MVCapplication의 리소스가 있습니다.클래스 경로에서 freemarker 템플릿로드

<bean id="myController" class="com.MyController"> 
     <property name="myTemplate" value="classpath:myTemplate.txt"/> 

</bean> 

그리고이 코드를 사용하여 프리 마커 템플릿으로로드하려고 :

private Resource myTemplate; 

... 

Configuration cfg = new Configuration(); 
cfg.setClassForTemplateLoading(this.getClass(), "/"); 
Template tpl = cfg.getTemplate(myResource.getFilename()); 

을하지만 난에서 끝나는 계속 : java.io.FileNotFoundException : 템플릿 클래스 경로를 찾을 수 없습니다 myTemplate.txt .

wassuggested 무엇을 구현하려했으나 here하지만 도움이되지 않습니다. 내가 지금까지 findso 수

유일한 해킹은 "클래스 경로 제거했다 : 파일 이름 문자열에서 접두사를하지만 난

답변

3

은 그래서 당신이 말하는이

어떤 아이디어 ... 그것을 수행하지 않으려는? 당신은 템플릿 이름에서 "class:"을 제거하고 싶지 않고 this question에 따르면 FreeMarker는 사용자 정의 TemplateLoader을 통해이를 이해하도록 가르치고 싶지 않습니다.이 옵션을 사용하지 않으면 다른 문제를 해결할 수있는 것은 무엇입니까? 마지막으로 할 수있는 조언 만 할 수 있습니다. TemplateLoader 맞춤 설정 (접두사를 제거한 후에 위임하는 방법또는 더 나은 것은 스프링 ResourceLoader에 위임 한 것뿐입니다). 이것이 FreeMarker가 원하는 것을 수행하도록 구성하는 방법입니다. 극단적 인 일이 아니며 직접 구현하십시오 TemplateLoader.

업데이트 : 그것은 기본적으로 은 프리 마커 템플릿 이름의 구문과 봄의 자원 이름 구문 사이에 불일치가 있다는 것을 알고 있으면 유용 가공에 의하여 수 있습니다. Spring 구문에 따라 "classpath:foo.ftl" 또는 "classpath:/foo.ftl"을 쓸 수 있습니다. 그러나 FreeMarker는 계획 부분이 항상 ://으로 끝나고 외로운 : 또는 :/이 특별한 것이 아니라고 가정합니다. 따라서 이러한 모든 리소스 경로는 상대 경로로 간주되므로 실제 템플릿 해상도보다 먼저 현재 템플릿 디렉토리가 앞에 추가됩니다. 이를 해결하기 위해 FreeMarker 2.3.22부터 Configuration.setTemplateNameFormat(TemplateNameFormat.DEFAULT_2_4_0) (template_name_format=DEFAULT_2_4_0 : Properties)을 사용할 수 있습니다.이 경우 체계 구분 기호로 :이 사용됩니다.

+0

내가 옳다고 가정하면 TemplateLoader – Joly

관련 문제