0 0

使用junit运行freemarker找不到模板20

我们是jsp项目,使用spring装配freemarker,在跑项目的时候正常,但是在跑testcase的时候报找不到模板


配置文件如下
    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/templates/" /> <!-- 配置模板加载路径 -->
           <property name="freemarkerSettings"><!-- 设置FreeMarker环境属性-->
            <props>
                 <prop key="template_update_delay">1</prop> <!-- 刷新模板的周期,单位为秒 -->
                 <!--<prop key="classic_compatible">true</prop>-->  <!-- 此属性可以防止模板解析空值时的错误 -->
                 <prop key="default_encoding">UTF-8</prop><!--模板的编码格式 -->      
                   <prop key="locale">zh_CN</prop><!-- 本地化设置--> 
                   <prop key="url_escaping_charset">UTF-8</prop>
                   <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
                   <prop key="date_format">yyyy-MM-dd</prop>
                   <prop key="time_format">HH:mm:ss</prop> 
                   <prop key="number_format">0.######</prop> 
                   <prop key="boolean_format">true,false</prop> 
                   <!--<prop key="auto_import">"/spring.ftl" as spring</prop> 
                   <prop key="whitespace_stripping">true</prop> 
                   <prop key="tag_syntax">auto_detect</prop>  --> 
            </props>
           </property>
    </bean>
项目是使用myeclipse向导创建的Web项目
配置文件的路径为 /WebRoot/WEB-INF/templates/page/index.ftl
获得template的java代码如下
Template t = freemarkerConfig.getConfiguration().getTemplate("/WEB-INF/templates/page/index.ftl");
顺便说一下,我还尝试过
Template t = freemarkerConfig.getConfiguration().getTemplate("/WebRoot/WEB-INF/templates/page/index.ftl");
Template t = freemarkerConfig.getConfiguration().getTemplate("/templates/page/index.ftl");
Template t = freemarkerConfig.getConfiguration().getTemplate("D:/myproject/WebRoot/WEB-INF/templates/page/index.ftl");


再顺便说一下,我已经诅咒过spring得freemarker插件一万遍了,也没有啥用。

任何帮助或建议都不胜感激。

问题补充:
fmjsjx 写道
从工程角度讲,testcase推荐使用test的resources,使用另一个专门配置测试环境的spring配置文件,而非使用主目录里的spring配置。
在spring配置文件的路径推荐使用classpath,就是这样写:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="classpath:/templates" />
    ...
</bean>

这样在java代码里的相对路径就是classpath下的templates目录了(一般放在resources里)。
之后只要用相对路径获取template就行了。

fmjsjx 写道
从工程角度讲,testcase推荐使用test的resources,使用另一个专门配置测试环境的spring配置文件,而非使用主目录里的spring配置。
在spring配置文件的路径推荐使用classpath,就是这样写:
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="classpath:/templates" />
    ...
</bean>

这样在java代码里的相对路径就是classpath下的templates目录了(一般放在resources里)。
之后只要用相对路径获取template就行了。



是的,使用clapass是ok的,但是这里有一个情况,目录结构已经定了。配置文件时放在WEB-INF下的。这个我是没有权利改变的。有什么变通的方法么?
2011年10月31日 17:31

3个答案 按时间排序 按投票排序

0 0

采纳的答案

引用

是的,使用clapass是ok的,但是这里有一个情况,目录结构已经定了。配置文件时放在WEB-INF下的。这个我是没有权利改变的。有什么变通的方法么?

没让你改变目录结构啊……
你不就只是用JUNIT跑个testcase么?
直接在src/test/resources下建个templates目录,把/WEB-INF/templates下的文件啊文件夹什么的都拷贝一份过去不就结了?

2011年11月01日 11:31
0 0
0 0

从工程角度讲,testcase推荐使用test的resources,使用另一个专门配置测试环境的spring配置文件,而非使用主目录里的spring配置。
在spring配置文件的路径推荐使用classpath,就是这样写:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="classpath:/templates" />
    ...
</bean>

这样在java代码里的相对路径就是classpath下的templates目录了(一般放在resources里)。
之后只要用相对路径获取template就行了。

2011年11月01日 10:23

相关推荐

Global site tag (gtag.js) - Google Analytics