从类路径加载freemarker模板
我从classpath加载的aSpring MVCapplication中有一个资源。从类路径加载freemarker模板
<bean id="myController" class="com.MyController">
<property name="myTemplate" value="classpath:myTemplate.txt"/>
</bean>
,我试图用这个代码,将其加载为Freemarker模板:
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迄今唯一黑客是删除“类路径:从文件名前缀字符串,但我不想做
任何想法...
所以你说的是什么?你不想从模板名称中删除"class:"
,并且根据this question你不想教FreeMarker通过定制的TemplateLoader
来理解它。我的意思是,如果你禁止这些,还有什么可以解决这个问题呢?只能建议你做最后一个;实施自定义TemplateLoader
(或者只删除"class:"
前缀,然后委托给ClassTemplateLoader
,或者,甚至更好,只是代表春季ResourceLoader
)。这就是你如何配置FreeMarker来做你想做的事情。这不是什么极端的事情,实施你自己的TemplateLoader
。
更新:它可能通过有用知道默认有FreeMarker的模板名称语法和Spring的资源名语法不匹配。根据Spring语法,您可以编写"classpath:foo.ftl"
或。但FreeMarker认为方案部分总是以://
结尾,而孤独的:
或:/
没什么特别的。因此,所有这些资源路径将被视为相对路径,因此当前模板目录将在实际模板解析之前添加在它们之前。为了解决这个问题,由于FreeMarker 2.3.22,你可以使用Configuration.setTemplateNameFormat(TemplateNameFormat.DEFAULT_2_4_0)
(template_name_format=DEFAULT_2_4_0
在Properties
),它确实认为:
作为方案分隔符。
我想你是对的,我会继续使用TemplateLoader – Joly 2012-03-20 12:24:41