복붙노트

[SPRING] 여러 개의 항아리에 freemarker 템플릿

SPRING

여러 개의 항아리에 freemarker 템플릿

여러 병에서 템플릿을 검색하도록 freemarker를 구성하려면 어떻게해야합니까? 봄.

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

하나의 war 파일 (배치)과 jar 파일 (의존성 있음).

One.war

/freemarker/simple.ftl

두. 병

/freemarker/test.ftl

작업.

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

작동하지 않습니다. test.ftl을 찾을 수 없습니다.

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

설정 값 :

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

One.war

/freemarker/simple.ftl

두. 병

/freemarker2/test.ftl

작업.

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

작업.

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

그리고 질문! 같은 경로 (classpath : / freemarker /)에서 여러 항아리 (전쟁)를 검색하는 freemarker를 구성하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.나는 해결책을 찾았다! 항상 SpringTemplateLoader를 통해로드하려면 preferFileSystemAccess를 해제하십시오.

    나는 해결책을 찾았다! 항상 SpringTemplateLoader를 통해로드하려면 preferFileSystemAccess를 해제하십시오.

        <!-- 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>
    
  2. ==============================

    2.프로그래밍 방식으로 유사한 작업을 수행하면 다음을 수행 할 수 있습니다.

    프로그래밍 방식으로 유사한 작업을 수행하면 다음을 수행 할 수 있습니다.

    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는 하위 패키지 "템플릿"에 대한 두 번째 검색 경로를 설정합니다.

    템플릿 경로를 더 추가 할 수 있습니다.

    희망이 도움이됩니다.

  3. from https://stackoverflow.com/questions/6870750/freemarker-templates-in-several-jars by cc-by-sa and MIT license