菜鸟笔记1——Freemarker记录

这篇博客是关于Freemarker的菜鸟笔记,涵盖了Freemarker的基本概念,包括集合遍历、条件判断、日期和数字格式化、运算符、内建函数以及空值处理等关键知识点,是初学者入门的参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

菜鸟笔记1——Freemarker

Freemarker

概括

	Freemarker模板与HTML页面是很相似的,freemarker包含有	文本、注释、
	插值和ftl指令。文本是直接输出的;注释格式:<#-- 注释 0-->  ;
	插值:${值}或者#{值};ftl指令:freemarker标签与HTML标签类似,
	有一部分标签例如<#list a as b><#list> 括号内要加#用以区分。
	freemarker中遇到过最多的问题就是语法格式错误,所以一定要注意!
	示例:
	<!DOCTYPE html>
	<head>
	<title>${title}</title> 
	<#include "include/head.ftl">
	<script src="${path}/js/video-ckin.js"></script></head>
	<body>
	<!--头部导航 start-->
	<#include "include/header.ftl">
	<!--banner-->
    <div class="news-detail-banner">
    </div>         
    <!--detail详情-->
    <#assign datamodel=getDataModel(id,"article")>
    <#if datamodel??>
    	<div class="page-main">
		<div class="news-detail">			         
		<h1>${datamodel.title}</h1>
		<span>${datamodel.createDate?string('yyyy/MM/dd')!}</span>							  
		<p>${datamodel.content}</p>
		<img src="${datamodel.picimg}" width="" height="" />
		<#assign uploads=listUpload(datamodel.id,"tbl_article","V")>
		<#if uploads[0].viewPath??>
		<div class="video-main">
              <video controls="controls" src="${uploads[0].viewPath}" data-ckin="default" data-overlay="1" width="" height="" object-fit="fill"></video>
            	</div>
		</#if>
		</div> 
        </div>	          
 	</#if>	    
    <!--底部 start-->  
	<#include "include/footer.ftl">
	<!--底部 end-->
	<!--右侧导航 start-->
	<#include "include/rightbase.ftl">
	<!--右侧导航 end-->
	<!--js调用-->
	<script src="${path}/js/jquery-1.8.3.min.js"></script>
    <!--左侧添加样式JS-->
    <script>
	$(document).ready(function(){
       方法内容...
	}); 
	}
</script>
</body>
</html>

集合遍历

假设集合a里面包含{星期一 星期二 星期三 星期四 星期五 星期六 星期天 }这些元素,
那么下面就可以遍历输出各个元素值;
<#list a as b>
	${b}
<#list>
输出结果:星期一 星期二 星期三 星期四 星期五 星期六 星期天 。

条件判断-if、switch、case、default、break

if语句:
<#if condition>
	做事件1
<#elseif condition>
	做事件2
<#elseif condition>
	做事件3
<#else>
	做事件4
</#if> 
示例:
定义一个参数   <#assign flag=85> 
<#if (falg>60)>
	优秀
<#else>
	加油哦
</#if> 
结果:优秀
<#-----------------------假装分割线---------------------------->
switch语句:
<#switch value> 
	<#case refValue>
		事件一
		<#break> 
	<#case refValue>
		事件二
		<#break> 
	<#default>
		事件三
</#switch> 

日期格式化

示例:
${date?string("yyyy-MM-dd HH:mm:ss zzzz")} 
${date?string("EEE, MMM d, ''yy")} 
${date?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")} 
输出结果是依次为: 
2008-04-08 08:08:08 Pacific Daylight Time 
Tue, Apr 8, '03 
Tuesday, April 08, 2003, 08:08:08 PM (PDT) 

数字格式化

数字格式化用#{expr;format}形式来格式化数字,其中format可以是: 
mX:小数部分最小X位 
MX:小数部分最大X位 
示例: 
<#assign x=3.582/> 
<#assign y=4/> 
#{x; M2} <#-- 输出3.58 --> 
#{y; M2} <#-- 输出4 --> 
#{x; m2} <#-- 输出3.6 --> 
#{y; m2} <#-- 输出4.0 --> 
#{x; m1M2} <#-- 输出3.58 --> 
#{x; m1M2} <#-- 输出4.0 --> 

运算符

表达式中支持的**比较运算符**: 
1,=或者==:判断两个值是否相等. 
2,!=:判断两个值是否不等. 
3,>或者gt:判断左边值是否大于右边值 
4,>=或者gte:判断左边值是否大于等于右边值 
5,<或者lt:判断左边值是否小于右边值 
6,<=或者lte:判断左边值是否小于等于右边值 
表达式中支持的**逻辑运算符**:
逻辑与:&& 
逻辑或:|| 
逻辑非:! 
需要注意的是---逻辑运算符只能作用于布尔值,否则会报错。 

内建函数

用以转换输出格式:
可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来轮换输出变量。
cap_first:使字符串第一个字母大写 
lower_case:将字符串转换成小写 
upper_case:将字符串转换成大写 
trim:去掉字符串前后的空白字符 
size:获取序列中元素的个数 
int:取得数字的整数部分,结果带符号 
html:对字符串进行HTML编码 
var?length :取得字符串长度 

示例: 
<#assign test="Aa & Bb"> 
${test?html} 
${test?upper_case?html} 
结果是:Aa &Bb; Jerry   AA &amp; BB 

类似String.indexof: 
“babcdabcd”?index_of(“abc”) 返回1 
“babcdabcd”?index_of(“abc”,2) 返回5 

空值处理运算符

对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它并不认识null值,null值和不存在的变量完全相同。
为了解决缺失变量的问题,FreeMarker提供了两个运算符:
!:指定缺失变量的默认值     
??:判断某个变量是否存在
示例:
值! 或 值!默认值,不给默认值   和   给默认值  两种
??运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false 。

关键字

item_index:是list当前值的下标 
item_has_next:判断list是否还有值 
替换字符串 replace :
${s?replace(‘ba’, ‘XY’ )} 
${s?replace(‘ba’, ‘XY’ , ‘规则参数’)}将s里的所有的ba替换成xy 规则参数包含: i r m s c f 具体含义如下:
i:大小写不区分. 
f:只替换第一个出现被替换字符串的字符串 
r: XY是正则表达式 

一些内置方法

**sequences内置方法** 
sequence?first 
返回sequence的第一个值;前提条件sequence不能是null 
sequence?last 
返回sequence最后一个值 
sequence?reverse 
反转sequence的值 
sequence?size 
返回sequence的大小 
sequence?sort 
对sequence按里面的对象toString()的结果进行**排序** 
sequence?sort_by(value) 
对sequence 按里面的对象的属性value进行排序 
如: sequence里面放入的是10 个user对象,user对象里面包含name,age等属性 
sequence?sort_by(name) 表示所有的user按user.name进行排序 
**hashes内置方法** 
hash?keys 
返回hash里的所有keys, 返回结果类型sequence 
hash?values 
返回hash里的所有value, 返回结果类型sequence 

写给自己!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值