>>问题处理 ${}
如果要在模板中出 ${aa}
解决:把“$”当特殊字符传递过来
>> 遍历循环
<#if fs?exists>
<#list fs as field >
<tr>
<td class="bmsInputCaption" width="25%" >${field.nameCn}</td>
<td class="bmsInputContent" width="75%" >
<s:property value="${table}DTO.${field.nameEn}"/>
</td>
</tr>
</#list>
</#if>
>> list中基偶行问题
<#if bookMap?exists>
<#list bookMap?keys as bookKey>
<#if bookKey_index%2 = 0>
<tr class="odd">
<#else>
<tr class="even">
</#if>
>>获取list长度
<#if (post.attachments?size > 0)>
1.输出 ${book.name}
空值判断:${book.name?if_exists },
${book.name?default(‘xxx’)}//默认值xxx
${ book.name!"xxx"}//默认值xxx
日期格式:${book.date?string('yyyy-MM-dd')}
数字格式:${book?string.number}--20
${book?string.currency}--<#-- $20.00 -->
${book?string.percent}—<#-- 20% -->
插入布尔值:
<#assign foo=ture />
${foo?string("yes","no")} <#-- yes -->
第一招:迭代Map
假设你有一个Map,像这样:
-
{"name":"mouse", "price":50 , "weight":30}
{"name":"mouse", "price":50 , "weight":30}
如何来迭代输出?
-
<
#-- 这里模拟了一个Map集合,定义了三对键值 --
>
-
<
#assign
h
= {"name":"mouse", "price":50, "weight":30}
>
-
-
<
#-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,
-
从这里我们也可以学到如何去调用一个类的方法 -->
-
<
#assign
keys
=
h
?keys
>
-
-
<
#-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 --
>
-
<
#list keys as key
>
${key} = ${h[key]};
</
#list
>
<#-- 这里模拟了一个Map集合,定义了三对键值 -->
<#assign h = {"name":"mouse", "price":50, "weight":30}>
<#-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,
从这里我们也可以学到如何去调用一个类的方法 -->
<#assign keys = h?keys>
<#-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 -->
<#list keys as key>${key} = ${h[key]}; </#list>
输出结果:
-
name
=
mouse
;
price
=
50
;
weight
=
30
;
name = mouse; price = 50; weight = 30;
第二招:如何判定字符串相等
这个有点小题大作,呵呵,其实很简单
-
<
#-- 定义了一种动物——狗 --
>
-
<
#assign
annimal
=
"Dog"
>
-
-
<
#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
-
注意:这里使用一个"="-->
-
<
#if
annimal
=
"Dog"
>
-
Wang! Wang!
-
<
#else
>
-
Ga! Ga!
-
</
#if
>
<#-- 定义了一种动物——狗 -->
<#assign annimal = "Dog">
<#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
注意:这里使用一个"="-->
<#if annimal = "Dog">
Wang! Wang!
<#else>
Ga! Ga!
</#if>
输出结果:
Wang! Wang!
第三招:处理空值
先要说明的是,在freemarker中,如果你试图去访问一个不存在的值(null),或者该值在访问时还没有被初始化,
那么它会毫不犹豫的抛给一个错误,并且立即终止模板的执行过程。为什么这么变态?
如何对付这样的情况?
答案:在它访问这个值失败的时候,给它一个默认的值!嘻嘻……
怎么赋默认值?
用这样的语法:
unsafe_expr!default_expr
或 unsafe_expr!
或 (unsafe_expr)!default_expr
或 (unsafe_expr)!
例子:
-
<
#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
-
当然"!"后面的这个值可以是一个表达式-->
-
${mouse!"No mouse."}
-
-
<
#-- 给mouse赋值 "Jerry" --
>
-
<
#assign
mouse
=
"Jerry"
>
-
-
<
#-- 再次访问mouse --
>
-
${mouse!"No mouse."}
<#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
当然"!"后面的这个值可以是一个表达式-->
${mouse!"No mouse."}
<#-- 给mouse赋值 "Jerry" -->
<#assign mouse="Jerry">
<#-- 再次访问mouse -->
${mouse!"No mouse."}
输出结果:
No mouse.
Jerry
另外对于"!"后面没有写任何值的情况,那么它的值可能是空String、空sequence 、空hash。
但是如果你想默认值是0或者false,那么你最好还是显式的指定,因为它不会对你那么友好的(Bad luck!)
还需要注意的是:
-
1. product.color!"red"
-
2. (product.color)!"red"
-
-
这两种写法所表示的含义是不一样的:
-
第一种写法只处理color为空的情况,对于product为空则束手无策。
-
第二种写法则可以同时处理product及color同时(或任意)为空的情况。
1. product.color!"red"
2. (product.color)!"red"
这两种写法所表示的含义是不一样的:
第一种写法只处理color为空的情况,对于product为空则束手无策。
第二种写法则可以同时处理product及color同时(或任意)为空的情况。
插播
,如何判断空值?
语法:unsafe_expr?? 或 (unsafe_expr)?? 返回值为true和false
第四招:几个常用的函数
使用函数的方式就像这样:user?upper_case 简单吧?
字符串函数:
html:
将会把一些特殊的html字符替换掉(比如:把 "<" 替换为"<")
cap_first:
首字母大写
lower_case:
转化为小写
upper_case:
转化为大写
trim:
去掉首尾的空白,包括空格、Tab、回车、换行
例子:
-
<
#-- 定义test值为"Tom & Jerry" --
>
-
<
#assign
test
=
"Tom & Jerry"
>
-
${test?html}
-
${test?upper_case?html}
-
-
输出为:
-
Tom & Jerry
-
TOM & JERRY
<#-- 定义test值为"Tom & Jerry" -->
<#assign test = "Tom & Jerry">
${test?html}
${test?upper_case?html}
输出为:
Tom & Jerry
TOM & JERRY
序列(也就是常说的List或Set等集合)函数:
size:
显示该序列的大小
数学函数:
int:
取整(例如: -1.9?int 返回值是 -1)
- 描述: 循环遍历相关代码
- 大小: 30 KB
分享到:
相关推荐
在"Struts2+Freemark 做到一个例子"中,你可能会看到以下的实践步骤: 1. 创建Action类并实现相关业务逻辑。 2. 编写FreeMarker模板文件(通常以`.ftl`为扩展名),定义视图布局和数据展示方式。 3. 在Struts2配置...
这部分内容还包括字符集问题处理、多线程环境下的使用、Bean包装、日志记录、在Servlet中使用FreeMarker、配置安全策略、与遗留系统的兼容性以及Ant工具和Jython的整合使用。 ### XML处理指南 FreeMarker可以用来...
标题中的“springboot集成mybatis分页,freemark,spring,logback完整小例子”表明这是一个关于Spring Boot项目,其中整合了MyBatis用于数据库操作,FreeMarker作为模板引擎处理视图,以及Spring框架和Logback日志系统...
- 使用 FreeMarker 生成个性化邮件内容,比如根据用户的购买记录发送定制化的促销邮件。 - 示例:根据用户购买历史,生成个性化的推荐商品列表。 3. **报表生成**: - 使用 FreeMarker 生成复杂的数据报表,如...
MyBatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。在Spring Boot中,可以...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,极大地简化了数据访问层的复杂性。 【FreeMarker】 FreeMarker是一个模板...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 三、FreeMarker简介 FreeMarker是一个模板引擎,是一个基于模板来生成...
在本项目中,Log4j用于记录程序运行时的各种信息,包括错误、警告、调试信息等,帮助开发者追踪和解决问题。 这个小样例项目涵盖了开发Web应用的基本架构,从依赖管理到后端服务、数据库操作、模板引擎以及日志记录...
它的Action接口和ActionSupport类是开发者编写业务逻辑的入口,而Interceptor(拦截器)则允许在Action执行前后进行额外的操作,如日志记录、权限验证等。 `asm`库是一个字节码操作和分析框架,用于生成和修改Java...
Spring+Mybatis+Freemarker 是一个常见的Java Web开发组合,用于构建高效、灵活的Web应用程序。这个组合中,Spring Boot 提供了便捷...在实际项目中,还可以进一步优化配置,如添加事务管理、日志记录、安全性控制等。
MySQL作为关系型数据库管理系统,存储了聊天记录、用户信息等数据。在本项目中,开发者可能创建了用户表、聊天室表、消息表等,用于存储和查询各种信息。使用JDBC或者MyBatis等持久层框架,可以方便地与MySQL进行...
Hibernate4是Java领域广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以像操作Java对象一样操作数据库记录。Hibernate4提供了强大的查询语言HQL和 Criteria API,可以方便地执行复杂的数据库...
Struts2.0、Spring2.5、FreeMarker和Ajax是Web开发中常见的技术栈,它们各自在应用程序架构中扮演着重要角色。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,用于简化开发并提供强大的控制...
这些操作涵盖了创建新记录、读取现有记录、更新记录和删除记录,是数据库交互的核心部分。手动编写这些代码虽然不难,但会耗费大量时间,降低了开发效率。为了解决这一问题,许多开发者倾向于使用代码生成工具,如...
Hibernate则是一个对象关系映射(ORM)工具,它允许开发者用Java对象来操作数据库记录,而无需编写SQL语句。在登录注册场景下,Hibernate可以帮助我们创建用户表,持久化用户数据,例如用户名、密码(通常加密存储)...
(userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用<#list table as map></#list>,注意这里的<#list></#list>标签不要和某对其他标签交叉,不...
开发者会在这里定义如何显示数据库中的记录,如每行显示哪些字段、如何排序、如何进行筛选等。Freemarker模板中的`<#list>`指令用于遍历数据集合,`<#if>`、`<#else>`则用于条件判断,而`<@include>`可以包含其他...
MyBatis通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。开发者可以直接编写SQL,拥有更高的灵活性,同时还能享受到框架提供的事务管理...
lblog-新一代个人开源博客 线上地址: 效果展示 ...更新记录 详见 欢迎大家star&fork 有好的建议或意见可以联系我。 我的生产环境是nginx(反代)+tomcat+java8+mysql5.7(必须在5.5以上不包含5.5) in centos7
例如,通过遍历输入的Java对象集合,`<#foreach>`可以生成多个`<resultMap>`或`<select>`元素,每个元素对应一个数据库表的记录。 在实际使用中,开发者会提供一个包含数据库元数据(如表名、字段名、类型等)的...