`

freemarker空值处理方法

 
阅读更多

如果empty标签没有在servlet中添加key或者值为null,会报错 empty Value Expression newTag is undefined。有人说这是个好的控制错误的机制,但本人不这么认为,因为空值太常见了,谁知道什么时候里面就成空值了?每个变量理论上都有可能。 难道每个变量都要加入一个判断?就像struts中丑陋的<empty>标签?既然是模板引擎,就要灵活,何必来那么多限制? 还好,freemarker至少提供了解决办法,否则我只好选择其它引擎了。

freemarker中空值的多种处理方法:

1.按照freemarker的规范,老老实实的判断是否有空值,有空值怎么处理。这在某种时候是有用的。格式:${empty!"EmptyValue of fbysss"} //有空值后判断出语句——>EmptyValue of fbysss
比如值为空时,你可以给出一个友好的说明,但是很多的变量都要这么说明,未免太麻烦了。

2.<#escape x as x!""></#escape>可以对所有的变量进行空值处理,这里是全部替换为空字符串。当然也可以替换为其它字符串。
如果其中某些变量不需要这种替换,可以加入<#noescape></#noescape>标签。

3.属性配置方法:
配置classic_compatible=true可以满足一般需要。默认情况变量为null则替换为空字符串,如果需要自定义,写上${empty!"EmptyValue of fbysss"}的形式即可

a.通过Configuration设置。Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);//设置属性

b.通过Eviroment设置。
   Environment env = template.createProcessingEnvironment(root, out);
   env.setClassicCompatible(true);

c.通过ftl设置:在ftl前加入<!--#setting classic_compatible=true-->;

d.通过Spring配置文件设置
<bean id="freemarkerConfig"
    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  <property name="freemarkerSettings">
    <props>
      <prop key="classic_compatible">true</prop>
    </props>
  </property>
</bean>

e.class目录下添加freemarker.properties文件:加入classic_compatible=true
(需要struts2或spring)

举一反三,其他属性也可以用类似方法进行设置。

分享到:
评论

相关推荐

    FreeMarker

    ### FreeMarker 概述 FreeMarker 是一款模板引擎,它主要功能是基于模板和变动的数据来生成...尽管存在一些挑战,如学习新模板语言和处理空值等,但对于大多数 Java 开发者来说,掌握 FreeMarker 的使用是非常有益的。

    freemarker资料集

    3. **空值处理**: 在FreeMarker中,如果尝试访问的对象或属性不存在,通常会返回一个空字符串。但可以通过`?exists`、`?defined`、`?not_null`等操作符来检查值是否存在。另外,可以设置全局或局部的`default`指令...

    freemarker判断对象是否为空的方法

    FreeMarker是一个强大的模板引擎,它使用...这些工具使得我们能够在模板中安全地处理可能为空的对象和属性,避免了因引用空值而引发的错误。在实际开发中,根据具体情况选择合适的方法,可以使代码更加健壮和易于维护。

    freemarker04

    除了内置的空值处理方式,你还可以自定义`null`的显示。通过创建一个`freemarker.template.Configuration`实例,并设置`nullValue`属性,可以指定当变量为`null`时显示的字符串。 6. **条件语句** 使用`&lt;#if&gt;`、`...

    Freemarker中List的应用

    8. **空值处理**:对于可能为空的列表,可以使用`?exists`或`?nonempty`进行检查,防止空指针异常。 9. **列表嵌套**:Freemarker支持多层列表的遍历,这对于展示复杂数据结构非常有用。 10. **自定义迭代器**:...

    freemarker模板

    通过阅读源码,我们可以学习到FreeMarker如何解析模板,如何处理变量和表达式,以及如何执行自定义指令和方法。 **最佳实践** 1. **模板设计**: 模板应尽可能保持简洁,逻辑处理尽量放在后台代码中,模板只负责...

    初试FreeMarker模板的一些问题

    使用FreeMarker时,应遵循一些最佳实践,如保持模板简洁,将业务逻辑保留在控制器中,避免在模板中进行大量计算,以及正确处理空值和异常。 10. **学习资源** 学习FreeMarker可以从官方文档开始,同时参考社区的...

    FreeMarker基础语法

    FreeMarker支持对序列(如列表)进行循环处理,同时提供了`break`语句用于提前终止循环。 ```fml ... // 处理每个item 特定值"&gt; &lt;#break&gt; // 当遇到特定值时,跳出循环 ``` ### 3. 包含文件 #### include ...

    freemarker(FTL)常见语法大全

    Freemarker提供了一系列内置函数来处理字符串: - **HTML编码**:`"${string?html}"`,将字符串转换为HTML安全的格式。 - **首字母大写**:`"${string?cap_first}"`,使字符串的第一个字母变成大写。 - **转为小写*...

    freemarker

    - 自定义空值处理,通过`freemarker.template.Configuration`设置`NullModel`。 7. **示例**: - 基本输出:`${user.name}`,输出用户对象的name属性。 - 条件判断:`管理员:普通用户:&lt;/#if&gt;`。 - 循环遍历:`$...

    Freemarker常用语法

    通过以上介绍,可以看出Freemarker不仅提供了基础的变量输出和格式化,还具备了高级的功能,如条件判断、循环处理以及宏定义,使其成为处理动态网页内容的强大工具。开发者可以根据实际需求灵活运用这些语法,构建...

    Freemarker入门学习资料

    4. **错误处理**: 在模板中使用`&lt;#if&gt;`或`&lt;#list&gt;`处理可能的空值,防止因数据不完整引发的异常。 通过深入学习"Freemarker入门学习资料"中的内容,你可以掌握Freemarker的基本使用、语法特性、与Spring的整合方法...

    freemarker总结

    1.10 空值处理运算符 FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量...

    Freemarker使用指南

    当调用`process()`方法解析模板时,Freemarker会自动将Context中的数据绑定到模板中,生成最终的静态文本文件。 在项目中引入Freemarker,需要根据不同的项目类型进行配置。在Maven工程中,需要在pom.xml文件中添加...

    freemarker中文手册

    ##### 1.1 空值处理 在FreeMarker中,可以通过`?if_exists`表达式来检查一个对象是否存在。例如: ```ftl Mouse found Mouse not found ``` 这里如果`mouse`对象存在,则输出“Mouse found”,否则输出...

    freemarker05

    6. **日期和时间(Date/Time)**: Freemarker处理日期和时间的方式很灵活,可以是Java的`Date`对象,也可以是ISO格式的字符串。日期时间可以进行格式化,如`${date?string("yyyy-MM-dd")}`。 7. **空值(Null)**: 当...

    深入浅出FreeMarker(一)-基础教程.pdf

    此外,它曾经存在空值判断和黄屏问题,以及集群环境下session数据序列化的难题,但这些问题在后续版本中已得到修复。还有一个限制是不能和JSF框架一起使用,尽管从技术角度来说是可行的。 在进行FreeMarker的开发...

    FreeMarker开发指南

    - **字符串处理**:利用FreeMarker内置的字符串处理方法。 - **初始化序列和哈希**:在模板中初始化序列和哈希对象。 - **注释**:使用`&lt;!-- comment --&gt;`进行注释。 6. **Web开发注意事项** - **Web对象**:...

Global site tag (gtag.js) - Google Analytics