2011-07-29 13 views
5

Jak skonfigurować Freemarker do wyszukiwania szablonów w kilku słoikach? Ze sprężyną.szablony freemarkerów w kilku słoikach

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

Jeden plik wojenny (do wdrożenia) i plik jar (w zależnościach).

One.war

/freemarker/simple.ftl

Two.jar

/freemarker/test.ftl

Work.

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

Nie działają. Nie można znaleźć test.ftl

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

Jeśli ustawienia to:

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

One.war

/freemarker/simple.ftl

Two.jar

/freemarker2/test.ftl

Praca.

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

Praca.

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

I pytanie! Jak skonfigurować freemarkera do wyszukiwania w kilku słoikach (wojnach) w tej samej ścieżce (ścieżka clas:/freemarker /)?

+0

Hmm, to jest coś, czego nigdy nie mogłem samemu wykonać. Zainteresowany odpowiedziami. Również moje pliki '.ftl' są w'/WEB-INF/freemarker/' –

+0

Gdzie pliki nie są tak ważne. – Alexander

+1

Dobre pytanie, szkoda z powodu akceptowanej stawki. –

Odpowiedz

7

Znalazłem rozwiązanie! Wyłącz preferredFileSystemAccess, aby zawsze ładować za pomocą 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 (logiczna preferFileSystemAccess)

Określ, czy preferują dostęp do systemu plików dla szablonu załadunku. Dostęp do systemu plików umożliwia szybkie wykrywanie zmian w szablonach.

Jeśli ta opcja jest włączona, FreeMarkerConfigurationFactory spróbuje rozwiązać podaną "szablonLoaderPath" jako zasób systemu plików (który będzie działał również dla rozszerzonych zasobów ścieżek klas i zasobów ServletContext).

Domyślnym ustawieniem jest "true". Wyłącz to, aby zawsze ładować za pomocą SpringTemplateLoader (tj. Jako strumień, bez gorącego wykrywania zmian w szablonach), co może być konieczne, jeśli niektóre szablony znajdują się w rozszerzonym katalogu klas, podczas gdy inne znajdują się w plikach jar.

1

Raz zrobiłem coś podobnego programowo:

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 to klasa bazowa dla moich prawdziwych serwletów.

Numer 1 ustawia ścieżkę wyszukiwania dla szablonów na {{WEB-INF/templates}} w bieżącym kontekście serwletu. Numer 2 ustawia drugą ścieżkę wyszukiwania do "szablonów" podpakietów.

Możesz dodać więcej ścieżek szablonów.

Mam nadzieję, że to pomaga.