如果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)
举一反三,其他属性也可以用类似方法进行设置。
- 浏览: 305641 次
- 性别:
- 来自: 北京
最新评论
-
kongdong88:
Netty简单应用与线上服 ...
用Netty实现的一个简单的HTTP服务器 -
phili1999:
兄弟,此乃Eclipse的bug,至今未解决,可见国人地位低啊 ...
eclipse的控制台在UTF-8编码下键盘输入BUG问题,请问有谁能解决 -
xiaguobing:
谢谢分享啊
MetaQ初探 -
ih0qtq:
...
java性能编码规范整理
相关推荐
### FreeMarker 概述 FreeMarker 是一款模板引擎,它主要功能是基于模板和变动的数据来生成...尽管存在一些挑战,如学习新模板语言和处理空值等,但对于大多数 Java 开发者来说,掌握 FreeMarker 的使用是非常有益的。
3. **空值处理**: 在FreeMarker中,如果尝试访问的对象或属性不存在,通常会返回一个空字符串。但可以通过`?exists`、`?defined`、`?not_null`等操作符来检查值是否存在。另外,可以设置全局或局部的`default`指令...
FreeMarker是一个强大的模板引擎,它使用...这些工具使得我们能够在模板中安全地处理可能为空的对象和属性,避免了因引用空值而引发的错误。在实际开发中,根据具体情况选择合适的方法,可以使代码更加健壮和易于维护。
除了内置的空值处理方式,你还可以自定义`null`的显示。通过创建一个`freemarker.template.Configuration`实例,并设置`nullValue`属性,可以指定当变量为`null`时显示的字符串。 6. **条件语句** 使用`<#if>`、`...
8. **空值处理**:对于可能为空的列表,可以使用`?exists`或`?nonempty`进行检查,防止空指针异常。 9. **列表嵌套**:Freemarker支持多层列表的遍历,这对于展示复杂数据结构非常有用。 10. **自定义迭代器**:...
通过阅读源码,我们可以学习到FreeMarker如何解析模板,如何处理变量和表达式,以及如何执行自定义指令和方法。 **最佳实践** 1. **模板设计**: 模板应尽可能保持简洁,逻辑处理尽量放在后台代码中,模板只负责...
使用FreeMarker时,应遵循一些最佳实践,如保持模板简洁,将业务逻辑保留在控制器中,避免在模板中进行大量计算,以及正确处理空值和异常。 10. **学习资源** 学习FreeMarker可以从官方文档开始,同时参考社区的...
FreeMarker支持对序列(如列表)进行循环处理,同时提供了`break`语句用于提前终止循环。 ```fml ... // 处理每个item 特定值"> <#break> // 当遇到特定值时,跳出循环 ``` ### 3. 包含文件 #### include ...
Freemarker提供了一系列内置函数来处理字符串: - **HTML编码**:`"${string?html}"`,将字符串转换为HTML安全的格式。 - **首字母大写**:`"${string?cap_first}"`,使字符串的第一个字母变成大写。 - **转为小写*...
- 自定义空值处理,通过`freemarker.template.Configuration`设置`NullModel`。 7. **示例**: - 基本输出:`${user.name}`,输出用户对象的name属性。 - 条件判断:`管理员:普通用户:</#if>`。 - 循环遍历:`$...
通过以上介绍,可以看出Freemarker不仅提供了基础的变量输出和格式化,还具备了高级的功能,如条件判断、循环处理以及宏定义,使其成为处理动态网页内容的强大工具。开发者可以根据实际需求灵活运用这些语法,构建...
4. **错误处理**: 在模板中使用`<#if>`或`<#list>`处理可能的空值,防止因数据不完整引发的异常。 通过深入学习"Freemarker入门学习资料"中的内容,你可以掌握Freemarker的基本使用、语法特性、与Spring的整合方法...
1.10 空值处理运算符 FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量...
当调用`process()`方法解析模板时,Freemarker会自动将Context中的数据绑定到模板中,生成最终的静态文本文件。 在项目中引入Freemarker,需要根据不同的项目类型进行配置。在Maven工程中,需要在pom.xml文件中添加...
##### 1.1 空值处理 在FreeMarker中,可以通过`?if_exists`表达式来检查一个对象是否存在。例如: ```ftl Mouse found Mouse not found ``` 这里如果`mouse`对象存在,则输出“Mouse found”,否则输出...
6. **日期和时间(Date/Time)**: Freemarker处理日期和时间的方式很灵活,可以是Java的`Date`对象,也可以是ISO格式的字符串。日期时间可以进行格式化,如`${date?string("yyyy-MM-dd")}`。 7. **空值(Null)**: 当...
此外,它曾经存在空值判断和黄屏问题,以及集群环境下session数据序列化的难题,但这些问题在后续版本中已得到修复。还有一个限制是不能和JSF框架一起使用,尽管从技术角度来说是可行的。 在进行FreeMarker的开发...
- **字符串处理**:利用FreeMarker内置的字符串处理方法。 - **初始化序列和哈希**:在模板中初始化序列和哈希对象。 - **注释**:使用`<!-- comment -->`进行注释。 6. **Web开发注意事项** - **Web对象**:...