freemarker使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker使用相关的知识,希望对你有一定的参考价值。

freemarker概述

  • 作为web应用框架的组件
  • 用于替代web应用框架中的jsp
  • 为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员
  • 拥有自身的语法,可以处理简单的判断循环等逻辑

部署步骤

引入jar包:

  • spring.context.support.jar
  • freemarker.jar

spring-mvc.xml

<!-- 设置freeMarker的配置文件路径 -->
<bean id="freemarkerConfiguration"class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="location" value="classpath:/freemarker.properties" />
</bean>

<!-- 配置freeMarker的模板路径 -->
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="freemarkerSettings" ref="freemarkerConfiguration" />
    <property name="templateLoaderPath" value="/pages/" />
    <property name="freemarkerVariables">
        <map>
            <!-- 设置一些常用全局变量 -->
            <entry key="xml_escape" value-ref="fmXmlEscape" />
        </map>
    </property>
</bean>

<!-- 配置freeMarker视图解析器 -->
<bean id="viewResolverFtl" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="contentType" value="text/html; charset=utf-8" />
    <property name="cache" value="true" />
    <property name="suffix" value=".ftl" />
    <property name="exposeRequestAttributes" value="true" />
    <property name="exposeSessionAttributes" value="true" />
    <property name="exposeSpringMacroHelpers" value="true" />
    <property name="requestContextAttribute" value="request" />
    <property name="order" value="0" />
</bean>

后台传数据给前端模板

public String test(Model model){
    Test test = testService.findById(1);
    model.addAttribute("name", "xiamo");
    model.addAttribute("testList", test);
    return "/test";
}

freemarker语法

输出变量

简单变量

${variable}

数据集合

${variable[index]}

map中的元素

${variable.field}
${variable["field"]}

字符串操作

字符串连接

${"Hello,${user}"}                                                                                                         
${"Hello, " + user +"!"}

字符串截取

<#assign str="01234">
${str[0]}
${str[0..3]}

判断比较

  1. =(或者==):判断两个值是否相等;
  2. !=:判断两个值是否不相等; 注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。而且FreeMarker的比较是精确比较,不会忽略大小写及空格。
  3. >(或者gt):大于
  4. >=(或者gte):大于等于
  5. <(或者lt):小于
  6. <=(或者lte):小于等于 注: 上面这些比较运算符可以用于数字和日期,但不能用于字符串。大部分时候,使用gt比>有更好的效果,因为FreeMarker会把>解释成标签的结束字符。可以使用括号来避免这种情况,
  7. &&: 逻辑与;
  8. ||:逻辑或;
  9. !:逻辑非

    <#if str=="1">
        1
    <#else>
        0
    </#if>
    

内建函数

  1. html:转义html代码,用于输出html代码

    ${htmlStr?html}
    
  2. cap_first:使字符串第一个字母大写
  3. lower_case:将字符串转成小写
  4. upper_case:将字符串转成大写
  5. trim:去掉字符串前后的空白字符
  6. size:获得集合中元素的个数
  7. int:取得数字的整数部分
  8. c:将字符串类型的数字转换成计算机能识别的字符串形式,如将"123,456.123"、"123456.123"、"000123456.123000"转换成“123456.123”

空值处理

  1. !:指定缺失变量的默认值

    ${str!default}
    
  2. ??:判断某个变量是否存在,返回一个布尔值

逻辑语法

判断指令

  1. if

    <#if str=="1">
        1
    <#else>
        0
    </#if>
    
  2. switch

    <#switch value>
        <#case refValue>...<#break>
        <#case refValue>...<#break>
        <#default>...
    </#switch>
    

循环指令

  1. list

    <#list books as book >
        ${item_index}、${book.name}<br/>
    </#list>
    

    item_index 下标, item_has_next 是否是最后一项的布尔值

宏指令

  1. macro

     <#macro macroName field1 field2>   <#--定义指令m1 -->
        <b>${field1}</b><#--各个入参的输出-->
        <b>${field2}</b>
        <b><#nested></b><#--content-->
    </#macro>
    <@macroName field1="aaaa" field2="bbbb"/>content<@m1 /><#--调用上面的宏指令 -->
    

引用和作用域

  1. 引用

    <#include "included.ftl" />
    
  2. 作用域

    <#import "imported.ftl" as imported/>
    ${imported.str}

 


文本内容属于本人学习过程中的笔记记录,如有错误欢迎指出。

以上是关于freemarker使用的主要内容,如果未能解决你的问题,请参考以下文章

java工程中使用freemarker例子

FreeMarker里如何调用java代码?

java工程中使用freemarker例子

FreeMarker自定义指令--代码实现

freemarker

FreeMarker里如何调用java代码?