2011-07-29 14 views
5

मैं कई जारों में टेम्पलेट्स को खोजने के लिए फ्रीमार्कर को कैसे कॉन्फ़िगर कर सकता हूं? वसंत के साथ।कई जारों में फ्रीमार्कर टेम्पलेट्स

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

एक युद्ध फ़ाइल (तैनाती के लिए), और जार फ़ाइल (निर्भरताओं में)।

One.war

/freemarker/simple.ftl

Two.jar

/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

Two.jar

/freemarker2/test.ftl

कार्य।

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

कार्य।

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

और सवाल! उसी मार्ग में कई जार (युद्ध) में खोज करने के लिए फ्रीमार्कर को कैसे कॉन्फ़िगर करें (क्लासपाथ:/फ्रीमार्कर /)?

+0

हम्म, यह ऐसा कुछ है जो मुझे कभी काम करने के लिए नहीं मिला। उत्तरों के लिए इच्छुक। इसके अलावा, मेरी '.ftl' फ़ाइलें '/ WEB-INF/freemarker /' –

+0

में हैं जहां फ़ाइलें इतनी महत्वपूर्ण नहीं हैं। – Alexander

+1

अच्छा सवाल, आपकी स्वीकार्य दर के बारे में शर्मिंदा। –

उत्तर

7

मुझे समाधान मिला! SpringTemplateLoader के माध्यम से हमेशा लोड करने के लिए प्राथमिक FileSystemAccess को बंद करें।

<!-- 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> 

सार्वजनिक शून्य setPreferFileSystemAccess (बूलियन preferFileSystemAccess)

सेट टेम्पलेट लोड करने के लिए फाइल सिस्टम का उपयोग पसंद करते हैं या नहीं। फ़ाइल सिस्टम का उपयोग टेम्पलेट परिवर्तनों की गर्म पहचान को सक्षम बनाता है।

यदि यह सक्षम है, तो FreeMarkerConfigurationFactory निर्दिष्ट "टेम्पलेट लोडरपाथ" को फ़ाइल सिस्टम संसाधन के रूप में हल करने का प्रयास करेगा (जो विस्तारित क्लास पथ संसाधनों और ServletContext संसाधनों के लिए भी काम करेगा)।

डिफ़ॉल्ट "सत्य" है। 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 उप-पैकेज "टेम्पलेट्स" के लिए दूसरा खोज पथ सेट करता है।

आप अधिक टेम्पलेट पथ जोड़ सकते हैं।

उम्मीद है कि यह मदद करता है।

संबंधित मुद्दे