2010-06-11 15 views
29

से फ्रीमार्कर टेम्पलेट सेट करना मेरे पास एक वेब एप्लिकेशन है जिसे मुझे मैन्युअल रूप से एक फ्रीमार्कर टेम्पलेट प्राप्त करने की आवश्यकता है - टेम्पलेट लाइब्रेरी प्रोजेक्ट में कक्षा के माध्यम से प्राप्त किया जाता है, लेकिन वास्तविक टीपीएल फ़ाइल वेब एप्लिकेशन क्लासपाथ में निहित होती है। तो, 2 परियोजनाएं हैं, एक 'ताक-बैकएंड-एपीआई' और दूसरा 'ताक-वेब'; टैक-बैकएंड-एपीआई में टेम्पलेट को पकड़ने और इसे संसाधित करने के लिए कोड है, लेकिन टैक-वेब वह जगह है जहां टेम्पलेट स्टोर होता है (विशेष रूप से: वेब-आईएनएफ/कक्षाएं/ईमेल/विक्रेता.पीएल) - मैंने सबकुछ इस्तेमाल करने से कोशिश की है Freemarkers setClassForTemplateLoading विधि का उपयोग करने के लिए स्प्रिंग्स क्लासपाथ संसाधन। मुझे लगता है कि यह काम करेगा:क्लासपाथ

freemarkerConfiguration = new Configuration(); 
    freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), ""); 
    Template freemarkerTemplate = freemarkerConfiguration.getTemplate("/email/vendor.tpl"); 

अभी तक, मुझे हमेशा FileNotFoundException मिलता है। क्या कोई क्लासपाथ से टेम्पलेट प्राप्त करने का सबसे अच्छा तरीका बता सकता है?

धन्यवाद।

freemarkerConfiguration = new Configuration(); 
freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), "/"); 
Template freemarkerTemplate = freemarkerConfiguration.getTemplate("email/vendor.tpl"); 

उत्तर

71

यह है कि क्या मेरे लिए काम समाप्त हो गया है जार में फ़ाइलों को नहीं ढूंढें इससे कोई फर्क नहीं पड़ता कि पथ उपसर्ग निर्दिष्ट है।

इसके बजाय, StrutsClassTemplateLoader का उदाहरण बनाएं। (मैं इसे की कस्टम उप-कक्षा में getTemplateLoader विधि में करता हूं।) इसमें कोई पैरामीटर नहीं होता है, इसलिए संभवतः यह जानता है कि स्ट्रैट्स और सम्मेलन चीजें कैसे करते हैं।

0

आप Struts 2 और कन्वेंशनों प्लगइन का उपयोग कर रहे हैं, तो wuntee के समाधान काम करने के लिए प्रतीत नहीं होता: बदले में setClassForTemplateLoading बनाता है जो नहीं करता है ClassTemplateLoader का एक उदाहरण

+0

कक्षा लोडर पदानुक्रम के आधार पर, कभी-कभी इसे सावधानीपूर्वक विचार किया जाना चाहिए कि आप 'क्लास टेम्पलेट लोडर' के लिए कौन सी कक्षा निर्दिष्ट करते हैं। प्रायः 'क्लास टेम्पलेट लोडर' कन्स्ट्रक्टर का उपयोग करना सबसे अच्छा होता है जो 'क्लासलोडर' सीधे ('कक्षा' के बजाय - 2.3.22 के बाद) लेता है, और उसके बाद वेब अनुप्रयोग के थ्रेड संदर्भ क्लास लोडर में गुजरता है। – ddekany

3
freemarkerConfiguration = new Configuration(); 
freemarkerConfiguration.setClassForTemplateLoading(this.getClass(), ""); 
Template freemarkerTemplate = freemarkerConfiguration.getTemplate("template.tpl"); 

इस विधि का उपयोग पैकेज जहां अपनी कक्षा स्थित है से कक्षाओं लोड करने के लिए है, इसलिए यदि आपकी कक्षा

org.foo.SomeClass है टेम्पलेट्स classpath में /org/foo में लिए देखा जाएगा। यह आपके टेम्पलेट्स को कक्षा के साथ संग्रहीत करता है जो उन्हें लोड/लोड करता है।

3

2017 में, निम्नलिखित बहिष्कृत हो गई है:

Configuration conf = new Configuration(); 

हम पास करना चाहिए निर्माता को freemarker.template.Version:

Configuration conf = new Configuration(new Version(2, 3, 23)); 
conf.setClassForTemplateLoading(Application.class, "/views"); 

जहां संस्करण संख्याओं FreeMarker के वर्तमान संस्करण को देखें।

views निर्देशिका src/main/resources में स्थित है।

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