freemarker報(bào) java.io.FileNotFoundException:及Te...
使用過freemarker的肯定其見過如下情況:
- java.io.FileNotFoundException: Template xxx.ftl not found.
模板找不到??赡苣銜J(rèn)為我明明指定了文件,并且文件存在,但是為什么就是說找不到呢?
經(jīng)過研究官方的API,原來freemarker在加載模板時(shí),建議使用TemplateLoader,通過TemplateLoader指定從哪個(gè)目錄開始加載模板,并且把模板加載在緩存中。
API的TemplateLoader是一個(gè)接口,他有如下幾個(gè)實(shí)現(xiàn)類:
- ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader
顧名思義,我們能從類名中猜想到freemarker的模板加載機(jī)制,舉例說明兩個(gè):
1:FileTemplateLoader
此是文件模板加載器,此即可以通過文件的絕對路徑加載模板,如:
- TemplateLoader templateLoader=null;
- String path="";
-
-
- templateLoader=new FileTemplateLoader(new File("項(xiàng)目根路徑"));
- path="/WEB-INF/classes/com/xxx/tag/templates/page/xxx.ftl";
-
- cfg.setTemplateLoader(templateLoader);
- Template t=cfg.getTemplate(path,"UTF-8");
2:ClassTemplateLoader
此是通過指定類所在的目錄來指定模板所在根路徑,即指定類在哪個(gè)目錄,那么這個(gè)目錄就是加載模板文件的根目錄,如下:
- Configuration cfg = new Configuration();
-
- TemplateLoader templateLoader=null;
- String path="";
-
- templateLoader=new ClassTemplateLoader(PageTag.class,"templates/page/");
- path="standardd.ftl";
-
- cfg.setTemplateLoader(templateLoader);
- Template t=cfg.getTemplate(path,"UTF-8");
此即表示比PageTag類所在的目錄開始找,找這個(gè)目錄下的templates/page/目錄,
其它的加載器原理同上,
如果你是web項(xiàng)目,并且使用了spring,那么。你還可以通過spring來配置你模板文件的根目錄,如下:
- <bean id="freemarkerConfig" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
- <property name="templateLoaderPath" value="/WEB-INF" />
- <property name="freemarkerSettings">
- <props>
- <prop key="defaultEncoding">UTF-8</prop>
- </props>
- </property>
- </bean>
此即表示從WEB-INF目錄下開始找。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。