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]}
判断比较
- =(或者==):判断两个值是否相等;
- !=:判断两个值是否不相等; 注: =和!=可以用作字符串、数值和日期的比较,但两边的数据类型必须相同。而且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}
文本内容属于本人学习过程中的笔记记录,如有错误欢迎指出。
以上是关于freemarker使用的主要内容,如果未能解决你的问题,请参考以下文章