2012-03-14 12 views
0

クラスパスからロードされたaSpring MVCアプリケーションのリソースを持っています。クラスパスから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でき

唯一のハックは、「クラスパス削除しました:ファイル名の文字列からプレフィックスを私は

答えて

3

だから何を言っているのである

任意のアイデア...それを行うことを好みません?あなたは"class:"をテンプレート名から削除したくないということと、this questionによれば、FreeMarkerはカスタムTemplateLoaderで理解することを教えたくありません。最後に行うアドバイスだけです。カスタムTemplateLoaderを実装してください("class:"のプレフィックスを削除してに代理するか、またはさらに良いものは、ResourceLoaderのSpringに委任しただけです)。それで、あなたが望むことを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_0Properties)を使用できます。これは、スキームセパレータとして:とみなされます。

+0

あなたが正しいと思いますが、私はTemplateLoader – Joly

関連する問題