`
txidol
  • 浏览: 54480 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

FreeMarker初级攻略

 
阅读更多

1. 备忘单

字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者 r"C:\raw\string"
 数字:123.45 <#list[BR] animals as[BR] being[BR] >[BR] ${being.name} for ${being.price} Euros[BR] </#list >
 布尔值:true, false
 序列:["foo", "bar", 123.45], 1..100
 哈希表:{"name":"green mouse", "price":150}
 检索变量
 顶层变量:user
 从哈希表中检索数据:user.name, user[“name”]
 从序列中检索:products[5]
 特殊变量:.main
 字符串操作
 插值(或连接):"Hello ${user}!"(或"Free" + "Marker")
 获取一个字符:name[0]
 序列操作
 连接:users + ["guest"]
 序列切分:products[10..19] 或 products[5..]
 哈希表操作
 连接:passwords + {"joe":"secret42"}
 算数运算: (x * 1.5 + 10) / 2 - y % 100
 比较运算:x == y, x != y, x < y, x > y, x >= y, x <= y, x &lt; y, 等等
 逻辑操作:!registered && (firstVisit || fromEurope)
 内建函数:name?upper_case
 方法调用:repeat("What", 3)
 处理不存在的值
 默认值:name!"unknown" 或者(user.name)!"unknown" 或者name! 或者 (user.name)!
 检测不存在的值:name?? 或者(user.name)??

2.字符串操作

插值(或连接)

${...} ${"${user}${user}${user}${user}"}

${user[0]} 等同user?string[0]


3.序列操作

<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>
- ${user}
</#list>

序列切分

[firstindex..lastindex] 。如果seq存储序列"a", "b", "c", "d", "e", "f",那么表达式seq[1..4]将会是含有"b", "c", "d", "e"的序列 ,从FreeMarker 2.3.3版本以后lastindex才能省略。


4.哈希表操作

<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe}
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}

打印

- Joe is 30
- Fred is 25
- Julia is 18


5.算数运算

算数运算包含基本的四则运算和求模运算,运算符有:
 加法:+
<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
- Joe is ${ages.Joe}
- Fred is ${ages.Fred}
- Julia is ${ages.Julia}
- Joe is 30
- Fred is 25
- Julia is 18
 减法:-
 乘法:*
 除法:/
 求模(求余):%

${100 – x*x}
${x/2}
${12%10}

+号,它可用来连接字符串的 ${3 + "5"} --》 35 FreeMarker不会自动将字符串转换为数字,反之会自动进行

${(x/2)?int} 计算结果的整数

比较运算

<#if user = "Big Joe">
It is Big Joe
</#if>
<#if user != "Big Joe">
It is not Big Joe
</#if>

<#if (x > y)> 等同 <#if x &gt; y>

可以使用lt代替<,lte代替<=,gt代替>,gte代替>=

常用的逻辑操作符:
 逻辑或:||
 逻辑与:&&
 逻辑非:!


6.内建函数

字符串使用的内建函数:
 html: 字符串中所有的特殊HTML字符都需要用实体引用来代替(比如<代替&lt;)。
 cap_first:字符串的第一个字母变为大写形式
 lower_case:字符串的小写形式
 upper_case:字符串的大写形式
 trim:去掉字符串首尾的空格
序列使用的内建函数:
 size:序列中元素的个数
数字使用的内建函数:
 int:数字的整数部分(比如-1.9?int就是-1)

7.方法调用

${repeat("What", 3)} 打印WhatWhatWhat


8.处理不存在的值 FreeMarker 2.3.7版本以后(用来代替内建函数default,exists和if_exists)。

这会出现undefinded

9.默认值

unsafe_expr!default_expr或unsafe_expr!或(unsafe_expr)!default_expr或(unsafe_expr)!
这个操作符允许你为可能不存在的变量指定一个默认值或空值空序列空哈希。

建议使用(unsafe_expr)!default_expr或(unsafe_expr)! 不管多少层里面多少操作,出错就变默认值

允许其中表达式的任意部分可以未定义

如(something.product.color)!"red" something为null也默认为red

10.检测不存在的值

unsafe_expr??或(unsafe_expr)??


11.操作符优先级规则 同java javascript


12.插值仅仅可以在两种位置使用:

文本区(如<h1>Hello ${name}!</h1>)和字符串表达式(如<#include "/footer/${company}.html">)中

如果插值在文本区(也就是说,不再字符串表达式中),如果escapse指令起作用了,即将被插入的字符串会被自动转义。如果你要生成HTML,那么强烈建议你利用它来阻止跨站脚本攻击和非格式良好的HTML页面。

<#escape x as x?html>
...
<p>Title: ${book.title}</p>
<p>Description: <#noescape>${book.description}</#noescape></p>
<h2>Comments:</h2>
<#list comments as comment>
<div class="comment">
${comment}
</div>
</#list>
...
</#escape>

美式数字格式 ${product.id?c} 给机器看的

日期/时间插入指南

date_format,time_format和datetime_format的setting

布尔值插入指南

${married?string("yes", "no")} 后面的会出错${a == 2}

精确的转换规则
对于有兴趣研究的人,表达式的值转换为字符(仍有变量不存在的可能)串精确的规则就是下面这些,以这个顺序进行:
1. 如果这个值是数字,那么它会按照指定的number_format设置规则来转换为字符串。所以这些转换通常是对用户进行的,而不是对计算机。
2. 如果这个值是日期,时间或时间日期类型的一种,那么它们会按照指定的time_format,date_format和datetime_format设置规则来转换为字符串,这要看日期信息中是只包含时间,日期还是全包括了。如果它不能被探测出来是哪种日期类型(日期或时间或日期时间)时,就会发生错误了。
3. 如果值本来就是字符串类型的,不需要转换。
4. 如果FreeMarker引擎在传统兼容模式下:
1. 如果值是布尔类型,那么就转换成”true”,false值将会转换为空串。
2. 如果表达式未被定义(null或者变量未定义),那么就转换为空串。
3. 否则就会发生错误中止模板执行。
5. 否则就会发生错误中止模板执行。


序列的索引

<#if (secondGoodsCategoryT3??)&&(secondGoodsCategoryT3?size>0) >
<#list secondGoodsCategoryT3 as second3>

<#if second3_index == 0>
<a href="${basepath}/${second3.htmlpath}}" target="_blank">${second3.name}</a>

</#if>
<#if second3_has_next>
|
</#if>
</#list>
</#if>



分享到:
评论

相关推荐

    struts1+spring+hibernate+freemarker一个小例子

    在这个初级示例中,开发者可能创建了一个简单的用户登录或注册功能,涉及到Struts1的动作映射,Spring的依赖注入,Hibernate的数据操作,以及Freemarker的模板渲染。虽然描述中提到内容简单,但实际操作中,这四个...

    freemarker+struts2+ibatis入门学习摘要

    描述中的"初级学习摘要+完整实例project"表明这是一个适合初学者的学习资料,包含了一些基础概念的总结以及一个实际的项目案例,可以在Eclipse开发环境中运行。这将帮助初学者通过实践来理解和掌握这三个框架的集成...

    程序员从初级到高级知识汇集

    - **Spring MVC+Hibernate+Freemarker开源项目**:提供了完整的Spring MVC、Hibernate和Freemarker集成的示例,适用于学习如何构建现代Web应用程序。 - **Spring单元测试**:这部分包含Spring单元测试的实例,通过...

    struts2初级入门

    这个"struts2初级入门"的教程将引导你逐步了解并掌握Struts2的基本概念、核心组件以及如何在实际项目中应用。 一、Struts2简介 Struts2是Apache软件基金会的项目,它是Struts1的升级版,旨在解决Struts1存在的性能...

    SSM初级练习项目.zip

    4. `src/main/webapp/WEB-INF/views`:存放JSP或Freemarker等视图文件,用于展示结果。 在学习和实践这个项目时,你需要了解以下步骤: 1. 创建数据库和表,编写对应的实体类。 2. 配置Spring、SpringMVC和MyBatis...

    struts2项目使用的初级常用jar包

    这个压缩包包含了一些Struts2框架在初级阶段开发时所必需的基础jar包。以下将详细解释这些jar包及其在Struts2项目中的作用。 1. **核心库:** - `struts2-core.jar`:这是Struts2的核心组件,包含了框架的基本结构...

    Java初级工程师真实简历模板44份.docx

    - 服装电子商城项目,使用SpringMVC + Spring + MyBatis,结合Tomcat、MySQL、JDK1.8、SVN、FreeMarker、Redis和Dubbo等技术,实现了商品管理、品牌管理等功能,并通过前端页面优化减轻服务器压力。 - 在线教育...

    EJB+Struts2初级项目

    4. **构建视图**:使用JSP(JavaServer Pages)或FreeMarker模板语言创建动态网页,展示数据和提供用户交互。 5. **数据库集成**:通过JPA(Java Persistence API)或JDBC与数据库进行交互,实现数据的增删改查操作...

    j2ee struts 框架初级

    通过学习和实践"j2ee struts 框架初级"的"firststruts2"项目,开发者能够掌握Struts2的基础架构,理解如何构建Action、配置Struts2、使用拦截器以及处理用户请求。这为后续更复杂的Java EE应用程序开发打下坚实基础...

    dalgenx:dalgenX是对支付宝dalgen代码生成器的开源实现,freemarker版,可迭代开发生成器,同时支持ibatis和mybatis

    dalgenX是对支付宝dalgen代码生成器的开源实现,freemarker版 该项目基于cn_rapidframework(dalgenx为了生产使用性改造很多) dalgen开源初级版最初由badqiu放在taocode上,badqiu大神我不认识,mybatis-plus-...

    Struts2简单开发环境的搭建(初级)

    4. **freemarker.jar**: Freemarker是一个模板引擎,Struts2默认视图技术之一,用于生成动态HTML或其他格式的文档。 5. **struts2-convention-plugin.jar**: 自动配置插件,简化Action类和结果的配置。 6. **struts2...

    4、用户模块-日志管理-多条件的查询分页操作结束-代码编写

    《基于SpringMVC、MyBatis、FreeMarker架构实战CMS大型门户网站(自定义模板)》 本课程适合于各个层次的Java开发人员,对于初级程序员来说,可以在短时间内迅速提高开发能力,掌握流行的技术,把握技术的发展脉络。...

    bbs,struts

    文件名为“travel”的压缩包可能包含了与旅行相关的话题或者功能,比如用户可以在这个BBS上分享旅行经历、发布旅游攻略,或者是提供一个专门讨论旅行问题的板块。这种特定主题的板块设置可以吸引具有共同兴趣的用户...

    struts2笔记1

    在项目搭建过程中,首先需要创建一个Web项目,然后导入必要的jar包,包括struts2-core、xwork-core、freemarker等。接着,配置核心过滤器StrutsPrepareAndExecuteFilter,这个过滤器负责处理所有HTTP请求。最后,...

    s2sh基础框架

    此外,Struts2支持多种结果类型和模板技术,如JSP、FreeMarker、Velocity等,方便灵活地构建视图层。 2. **Spring框架** Spring是Java企业级应用的核心框架,提供了依赖注入(DI)和面向切面编程(AOP)等特性,...

    JEECMS3.0.4使用教程

    总结来说,JEECMS3.0.4是一个功能强大的JavaEE网站管理系统,其易用性和灵活性使得即便是初级开发者也能快速上手。通过安装教程和模板教程的学习,用户可以迅速搭建并个性化自己的网站,同时得益于其优化的SEO策略和...

    springbootDemo.zip

    3. **视图解析**:SpringBoot 默认使用 Thymeleaf、FreeMarker 或者 Velocity 作为模板引擎,用于渲染 HTML 视图。 4. **日志配置**:SpringBoot 默认使用 Logback 或 Log4j2 作为日志系统。 5. **应用配置**:...

    刘树全的J2EE培训教程

    模板技术如WebMacro、Velocity和FreeMarker用于生成动态内容。AJAX技术,如DWR,可以提升用户体验。MVC和框架部分,包括Struts、Expresso、Webwork、Spring MVC、SOFIA、Weblogic PageFlow和Tapstry,这些都是常见的...

    strtus2学习电子书

    此外,还可能涵盖视图层的实现,如JSP、FreeMarker或Velocity模板语言的使用,以及如何进行国际化和异常处理。 在实际开发中,Struts2允许开发者通过注解来简化配置,使得代码更加简洁易读。例如,@Action注解可以...

Global site tag (gtag.js) - Google Analytics