FreeMarker使用归纳

一般用来做界面 配置文件 还可以生成源代码(xml jsp也可以)比jsp运行效率高(因为不需要转换成java到class 是直接对模版进行解析 解析差值 把值插入然后返回页面数据)

springMVC使用时候需要的两个配置 将FreeMarkerViewResolver 放在InteralResourceViewResolver前面(order是0优先级最高 InteralResourceViewResolver的order是整数的最大值 所以先找FreeMarker 没有才找 jsp)
<bean id="freemarkerConfig"  
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
            <!-- <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> -->
            <property name="templateLoaderPaths">
                <list>
                    <value>classpath:/ftl/</value>   //FreeMarker可以在类路径下加载的!~
                </list>
            </property>
            <property name="freemarkerSettings">  
                <props>  
                    <prop key="defaultEncoding">UTF-8</prop>
                    <prop key="template_update_delay">0</prop>  
                    <prop key="default_encoding">UTF-8</prop>  
                    <prop key="number_format">0.##########</prop>  
                    <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  
                    <prop key="classic_compatible">true</prop>  
                    <prop key="template_exception_handler">ignore</prop>  
                </props>  
            </property>  
</bean>
    
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"  
p:prefix="/" p:suffix=".ftl">
        <property name="cache" value="false" />
        <property name="viewClass"
 value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <property name="contentType" value="text/html;charset=UTF-8"></property>
        <property name="exposeRequestAttributes" value="true" />
        <property name="exposeSessionAttributes" value="true" />
        <property name="exposeSpringMacroHelpers" value="true" />
        <property name="requestContextAttribute" value="base"></property>
        <property name="order" value="0"></property>
</bean>

**

常用的语法

**

条件判断
<#if condition>
    ...
<#elseif condition2>
    ...
<#elseif condition3>
    ...
<#else>
    ...
</#if>


循环     (序号:as后面的变量+_index     )
<#list users as user>
    ${user.name}
</#list>

包含
<#include "xxxx.ftl"> 

一些常用的表达式:
${x.name?if_exists }				用于判断如果存在,就输出这个值
${x.name?default(‘xxx’)}			默认值xxx
${x.name!"xxx"}						默认值xxx
${x.date?string('yyyy-MM-dd')}		日期格式
s?html								对字符串进行HTML编码
s?cap_first							使字符串第一个字母大写
s?lower_case						将字符串转换成小写
s?trim								去掉字符串前后的空白字符
s?size								获得序列中元素的数目

**

freemarker生成java源码

用一个最简单的生成类的例子来说明 可以利用它使用一个java模块来快速生成所需要的代码 只要模块可以通用 就只需要自己准备好要插入的值
**

package ${packageName}.bean;
public class ${className} {
}
只要将值插入 就可以使用


Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(ftl文件));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
Map paramMap = new HashMap();
paramMap.put(你要插入的值);
paramMap.put(你要插入的值);
Template t = cfg.getTemplate("bean.ftl");
// 组合生成
Writer out = new OutputStreamWriter(new FileOutputStream(new File(ftl文件)), "UTF-8");
// 执行
t.process(paramMap, out);
发布了63 篇原创文章 · 获赞 44 · 访问量 6237

猜你喜欢

转载自blog.csdn.net/weixin_40695328/article/details/95176655