`
xiangxingchina
  • 浏览: 520178 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

freemark中问题记录

阅读更多

>>问题处理  ${}

 

如果要在模板中出 ${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,像这样:

Xml代码
  1. {"name":"mouse", "price":50 , "weight":30}  
{"name":"mouse", "price":50 , "weight":30}

 
如何来迭代输出?

Html代码
  1. < #-- 这里模拟了一个Map集合,定义了三对键值 -- >   
  2. < #assign  h  = {"name":"mouse", "price":50, "weight":30} >   
  3.   
  4. < #-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,  
  5. 从这里我们也可以学到如何去调用一个类的方法 -->   
  6. < #assign  keys  =  h ?keys >    
  7.   
  8. < #-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 -- >   
  9. < #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>

 
输出结果:

Html代码
  1. name  =  mouse price  =  50 weight  =  30 ;   
name = mouse; price = 50; weight = 30; 

 

第二招:如何判定字符串相等
      这个有点小题大作,呵呵,其实很简单

Html代码
  1. < #-- 定义了一种动物——狗 -- >   
  2. < #assign  annimal  =  "Dog" >   
  3.   
  4. < #-- 做一下条件判断,如果是狗就输出"Wang! Wang!"  
  5. 注意:这里使用一个"="-->   
  6. < #if  annimal  =  "Dog" >   
  7. Wang! Wang!  
  8. < #else >   
  9. Ga! Ga!  
  10. </ #if >   
<#-- 定义了一种动物——狗 -->
<#assign annimal = "Dog">

<#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
注意:这里使用一个"="-->
<#if annimal = "Dog">
Wang! Wang!
<#else>
Ga! Ga!
</#if>

 

输出结果:

Html代码
  1. Wang! Wang!   
Wang! Wang! 

 

第三招:处理空值
      先要说明的是,在freemarker中,如果你试图去访问一个不存在的值(null),或者该值在访问时还没有被初始化,
那么它会毫不犹豫的抛给一个错误,并且立即终止模板的执行过程。为什么这么变态?

 

如何对付这样的情况?
答案:在它访问这个值失败的时候,给它一个默认的值!嘻嘻……

 

怎么赋默认值?
用这样的语法:
unsafe_expr!default_exprunsafe_expr!(unsafe_expr)!default_expr(unsafe_expr)!


例子:

Html代码
  1. < #-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"  
  2. 当然"!"后面的这个值可以是一个表达式-->   
  3. ${mouse!"No mouse."}  
  4.   
  5. < #-- 给mouse赋值 "Jerry" -- >   
  6. < #assign  mouse = "Jerry" >   
  7.   
  8. < #-- 再次访问mouse -- >   
  9. ${mouse!"No mouse."}  
<#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
当然"!"后面的这个值可以是一个表达式-->
${mouse!"No mouse."}

<#-- 给mouse赋值 "Jerry" -->
<#assign mouse="Jerry">

<#-- 再次访问mouse -->
${mouse!"No mouse."}

 

输出结果:

Html代码
  1. No mouse.  
  2. Jerry   
No mouse.
Jerry 

 

另外对于"!"后面没有写任何值的情况,那么它的值可能是空String、空sequence 、空hash。
但是如果你想默认值是0或者false,那么你最好还是显式的指定,因为它不会对你那么友好的(Bad luck!)

还需要注意的是:

Html代码
  1. 1. product.color!"red"   
  2. 2. (product.color)!"red"   
  3.   
  4. 这两种写法所表示的含义是不一样的:  
  5. 第一种写法只处理color为空的情况,对于product为空则束手无策。  
  6. 第二种写法则可以同时处理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字符替换掉(比如:把 "<" 替换为"&lt;")

cap_first: 首字母大写
lower_case: 转化为小写
upper_case: 转化为大写
trim: 去掉首尾的空白,包括空格、Tab、回车、换行


例子:

Html代码
  1. < #-- 定义test值为"Tom & Jerry" -- >   
  2. < #assign  test  =  "Tom & Jerry" >   
  3. ${test?html}  
  4. ${test?upper_case?html}  
  5.   
  6. 输出为:  
  7. Tom & Jerry  
  8. 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

    在"Struts2+Freemark 做到一个例子"中,你可能会看到以下的实践步骤: 1. 创建Action类并实现相关业务逻辑。 2. 编写FreeMarker模板文件(通常以`.ftl`为扩展名),定义视图布局和数据展示方式。 3. 在Struts2配置...

    freemark中文手册

    这部分内容还包括字符集问题处理、多线程环境下的使用、Bean包装、日志记录、在Servlet中使用FreeMarker、配置安全策略、与遗留系统的兼容性以及Ant工具和Jython的整合使用。 ### XML处理指南 FreeMarker可以用来...

    springboot集成mybatis分页,freemark,spring,logback完整小例子

    标题中的“springboot集成mybatis分页,freemark,spring,logback完整小例子”表明这是一个关于Spring Boot项目,其中整合了MyBatis用于数据库操作,FreeMarker作为模板引擎处理视图,以及Spring框架和Logback日志系统...

    freemark笔记、语法、讲解大全

    - 使用 FreeMarker 生成个性化邮件内容,比如根据用户的购买记录发送定制化的促销邮件。 - 示例:根据用户购买历史,生成个性化的推荐商品列表。 3. **报表生成**: - 使用 FreeMarker 生成复杂的数据报表,如...

    maven-jar-springboot+mybatis+freemark整合.zip

    MyBatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。在Spring Boot中,可以...

    SpringMVC+mybits+freemark 代码自动生成 +shiro简易开发系统

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,极大地简化了数据访问层的复杂性。 【FreeMarker】 FreeMarker是一个模板...

    springboot mybatis freemark 框架集成 加实现demo

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 三、FreeMarker简介 FreeMarker是一个模板引擎,是一个基于模板来生成...

    maven+springboot+mybatis-plus+freemarker+log4j小样例

    在本项目中,Log4j用于记录程序运行时的各种信息,包括错误、警告、调试信息等,帮助开发者追踪和解决问题。 这个小样例项目涵盖了开发Web应用的基本架构,从依赖管理到后端服务、数据库操作、模板引擎以及日志记录...

    Struts2源码(xwork|asm|commons|freemark|ognl)

    它的Action接口和ActionSupport类是开发者编写业务逻辑的入口,而Interceptor(拦截器)则允许在Action执行前后进行额外的操作,如日志记录、权限验证等。 `asm`库是一个字节码操作和分析框架,用于生成和修改Java...

    spring+mybatis+freemarker

    Spring+Mybatis+Freemarker 是一个常见的Java Web开发组合,用于构建高效、灵活的Web应用程序。这个组合中,Spring Boot 提供了便捷...在实际项目中,还可以进一步优化配置,如添加事务管理、日志记录、安全性控制等。

    springboot+freemark+websocket+MySQL实现的在线聊天系统源码.rar

    MySQL作为关系型数据库管理系统,存储了聊天记录、用户信息等数据。在本项目中,开发者可能创建了用户表、聊天室表、消息表等,用于存储和查询各种信息。使用JDBC或者MyBatis等持久层框架,可以方便地与MySQL进行...

    Jersey Spring4 Freemarker HIbernate整合搭建

    Hibernate4是Java领域广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以像操作Java对象一样操作数据库记录。Hibernate4提供了强大的查询语言HQL和 Criteria API,可以方便地执行复杂的数据库...

    Struts2.0+Spring2.5+freemarker+ajax

    Struts2.0、Spring2.5、FreeMarker和Ajax是Web开发中常见的技术栈,它们各自在应用程序架构中扮演着重要角色。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,用于简化开发并提供强大的控制...

    简单crud代码生成工具

    这些操作涵盖了创建新记录、读取现有记录、更新记录和删除记录,是数据库交互的核心部分。手动编写这些代码虽然不难,但会耗费大量时间,降低了开发效率。为了解决这一问题,许多开发者倾向于使用代码生成工具,如...

    spring+hibernate+freemarker+jQuery 登录注册例子

    Hibernate则是一个对象关系映射(ORM)工具,它允许开发者用Java对象来操作数据库记录,而无需编写SQL语句。在登录注册场景下,Hibernate可以帮助我们创建用户表,持久化用户数据,例如用户名、密码(通常加密存储)...

    SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环

    (userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用&lt;#list table as map&gt;&lt;/#list&gt;,注意这里的&lt;#list&gt;&lt;/#list&gt;标签不要和某对其他标签交叉,不...

    基于Freemarker模板的代码生成器前台页面模板文件

    开发者会在这里定义如何显示数据库中的记录,如每行显示哪些字段、如何排序、如何进行筛选等。Freemarker模板中的`&lt;#list&gt;`指令用于遍历数据集合,`&lt;#if&gt;`、`&lt;#else&gt;`则用于条件判断,而`&lt;@include&gt;`可以包含其他...

    springmvc+mybatis+maven+freemarker+urlwrite+decorators

    MyBatis通过XML或注解的方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。开发者可以直接编写SQL,拥有更高的灵活性,同时还能享受到框架提供的事务管理...

    lblog:Spring启动+ JPA + Freemark + bootstrap4

    lblog-新一代个人开源博客 线上地址: 效果展示 ...更新记录 详见 欢迎大家star&fork 有好的建议或意见可以联系我。 我的生产环境是nginx(反代)+tomcat+java8+mysql5.7(必须在5.5以上不包含5.5) in centos7

    Freemarker代码生成器实体映射xml的ftl模板文件

    例如,通过遍历输入的Java对象集合,`&lt;#foreach&gt;`可以生成多个`&lt;resultMap&gt;`或`&lt;select&gt;`元素,每个元素对应一个数据库表的记录。 在实际使用中,开发者会提供一个包含数据库元数据(如表名、字段名、类型等)的...

Global site tag (gtag.js) - Google Analytics