freemarker使用

mac2022-06-30  24

freemarker概述

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

部署步骤

引入jar包:

spring.context.support.jarfreemarker.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]}

判断比较

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

!:逻辑非

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

内建函数

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

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

空值处理

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

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

逻辑语法

判断指令

if

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

switch

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

循环指令

list

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

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

宏指令

macro

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

引用和作用域

引用

<#include "included.ftl" />

作用域

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

 


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

转载于:https://www.cnblogs.com/huangzc/p/7654760.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)