2011-07-29 22 views
5

freemarkerを設定して、いくつかのjarファイルでテンプレートを検索するにはどうすればよいですか?春に。freemarkerテンプレート複数のjarファイル

<!-- freemarker config --> 
<bean id="freemarkerConfig" 
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPaths" value="classpath:/freemarker/" /> 
</bean> 

1つのwarファイル(展開する)とjarファイル(依存関係)。

One.war

/freemarker/simple.ftl

Two.jar

/freemarker/test.ftl

作業。

ModelAndView mav = new ModelAndView(); 
mav.setViewName("simple"); 

Do not work。

<property name="templateLoaderPaths" value="classpath:/freemarker/,classpath:/freemarker2/" /> 

/freemarker/simple.ftl

Two.jar

/

One.war:test.ftl

ModelAndView mav = new ModelAndView(); 
mav.setViewName("test"); 

設定する場合があるが見つかりません。 freemarker2/test.ftl

仕事。

ModelAndView mav = new ModelAndView(); 
mav.setViewName("simple"); 

Work。

ModelAndView mav = new ModelAndView(); 
mav.setViewName("test"); 

質問!同じパス(classpath:/ freemarker /)でいくつかのjar(戦争)を検索するfreemarkerを設定するには?私はプログラム的に同様のことをした後は

+0

うーん、これは私が自分自身を動作するようになったことはありませんものです。返信に興味があります。 また、私の '.ftl'ファイルは'/WEB-INF/freemarker/'にあります。 –

+0

ファイルはそれほど重要ではありません。 – Alexander

+1

良い質問、あなたの受け入れ率については恥ずかしいです。 –

答えて

7

解決策が見つかりました! preferFileSystemAccessをオフにすると、常にSpringTemplateLoader経由でロードされます。

<!-- freemarker config --> 
<bean id="freemarkerConfig" 
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
    <property name="templateLoaderPaths" value="classpath:/freemarker/" /> 
    <property name="preferFileSystemAccess" value="false" /> 
</bean> 

ます。public void setPreferFileSystemAccess(ブールpreferFileSystemAccess)は

テンプレートの読み込み用のファイルシステムへのアクセスを好むかどうかを設定します。ファイルシステムアクセスにより、テンプレートの変更をホット検出できます。

これを有効にすると、FreeMarkerConfigurationFactoryは指定された "templateLoaderPath"をファイルシステムリソースとして解決しようとします(拡張クラスパスリソースとServletContextリソースでも機能します)。

デフォルトは「true」です。これをオフにすると、テンプレートの一部が拡張されたクラスディレクトリに存在し、その他がjarファイルに存在する場合に必要な、SpringTemplateLoader(つまりテンプレート変更のホット検出なしのストリーム)が常にロードされます。

1

は:

public class ControllerServlet extends HttpServlet { 
    private Configuration cfg; 
    public void init() { 
    cfg = new Configuration(); 
    // 1 
    WebappTemplateLoader wtl = new WebappTemplateLoader(getServletContext(), "WEB-INF/templates"); 
    // 2 
    ClassTemplateLoader ctl = new ClassTemplateLoader(ControllerServlet.class, "templates"); 
    MultiTemplateLoader mtl = new MultiTemplateLoader(new TemplateLoader[] {wtl, ctl}); 
    cfg.setTemplateLoader(mtl); 
    //.... 
} 
} 

ControllerServletのは、私の本当のサーブレットの基本クラスです。

1は、テンプレートの検索パスを現在のサーブレットコンテキストの{{WEB-INF/templates}}に設定します。 番号2は、サブパッケージ「テンプレート」への2番目の検索パスを設定します。

テンプレートパスを追加することができます。

希望します。

関連する問題