`

Freemark is not specified异常的一点思考

阅读更多

  同事在调试Freemark遇到如下错误:

Error executing macro: freeBackTable required parameter: itemList is not specified.……

 

  由于此前我没有了解过Freemark。因此,google中检索了一下,很多帖子说是空值问题。同事认为不是。但是,随后我在阅读Freemark官方的FAQ中发现有如下说明。因此,我认为这是null值引起的。

 

17. What about null and the FreeMarker template language?  
  The FreeMarker template language doesn't know the Java language null at all. It doesn't have null keyword, and it can't test if something is null or not. When it technically faces with a null, it treats it exactly as a missing variable.

 

  也就是说当FreeMarker程序中遇到null引用,会认为这个值没有声明。于是运行项目发现模板的908行报同样错误。其中有形如如下语句<@itemList=freeBackTable.itemList/>。因此我怀疑Struts2的对象为null,从而导致宏语句

“<#macro freeBackTable project  reformingFeedBack itemList checkNotifyingFM index>”中声明的itemList引用了一个空值,按照官方的说明,相当于“a missing variable”也就是说“not specified”。

  因此,加上Freemark的判断,在对“itemList”赋值语句前增加如下判断:“<#if freeBackTable.itemList?exists && freeBackTable.itemList?has_content>”,结果如下所示

<#if freeBackTable.itemList?exists && freeBackTable.itemList?has_content>
         <@itemList=freeBackTable.itemList />
</#if>

 

  再次运行程序,问题解决。在使用Freemark自定义的变量前,如果变量引用了一个第三方传递过来的对象,应该先判断该对像是否为null,在赋值给这个自定义变量。

 

3
3
分享到:
评论
1 楼 wuzhiyuzhi 2012-11-02  
谢谢,有帮助……

相关推荐

    Freemark标签

    主要介绍了freemark标签的相关基础知识,基本上了解Freemark标签的应用

    Freemark指南

    x is not 1 ``` - **`switch`、`case`、`default`、`break`**:用于处理多个条件分支的情况。 - **语法**: ```html &lt;!-- 当值等于refValue1时执行的内容 --&gt; &lt;!-- 当值等于refValue2时执行的内容 ...

    freemark资料及eclipse的freemark插件

    标题中的"freemark资料及eclipse的freemark插件"表明我们将讨论关于FreeMarker的学习资源以及如何在Eclipse中使用FreeMarker插件进行开发。 FreeMarker的核心概念包括模板、数据模型和配置。模板是HTML或者其他文本...

    freemark开发指南(入门)

    FREEMARK资料,开发入门指南 是开发人员了解FREEMARK的一本入门资料

    FreeMark Jar包 包括 中文 官方文档

    这个压缩包包含的是FreeMark的中文官方文档,对于理解和使用FreeMark非常有帮助。 "FreeMarker_2.3.23_Manual_zh_CN.chm" 是FreeMark的2.3.23版本的中文帮助文档,通常以CHM(Microsoft Compiled HTML Help)格式...

    freemark

    freemark资料

    freemark开发指南详解

    - **错误处理**:合理设置Freemarker的错误处理策略,以便于调试和异常捕获。 - **性能优化**:合理使用缓存,减少不必要的模板加载和解析。 - **版本控制**:对模板文件进行版本控制,便于协同开发和回滚。 6. ...

    Freemark模板使用

    本教程适用于初学者,旨在快速引导你掌握Freemark的基本使用方法。我们将通过几个关键步骤来理解并实践如何在Java环境中配置和使用Freemark。 首先,你需要在项目中引入Freemark的库文件。在这个例子中,我们导入了...

    freemark 资料学习

    在你提供的资料中,"freemark中文资料"和"freemark教程"是学习的关键。它们可能包含了Freemarker的基本概念解释、实例演示、常见问题解答等。"freemark基础和高级教程"则更深入地讲解了Freemarker的各种特性,是进阶...

    实现FreeMark读取模板生成HTML

    在实际项目中,你可能还需要处理异常、优化性能,以及考虑模板的复用和缓存等问题。 FreeMarker提供的功能远不止这些,它支持条件判断、循环、宏等高级特性,可以根据具体需求灵活运用。在进行FreeMarker编程时,...

    freemark 生成静态页面

    在这个项目中,我们讨论的是如何利用FreeMarker来生成静态页面。 首先,要理解FreeMarker的工作原理。...这使得我们可以灵活地构建动态网页,同时保持页面源码的清晰和可读性。 在给定的项目中,我们看到`...

    Freemark基础入门+深入

    相比Velocity,Freemarker提供了更多高级特性,如过程调用、递归和闭包回调,使其能处理复杂的逻辑和数据操作。这篇文章将引导你从基础开始了解并深入探索Freemarker。 1. **基本语法** Freemarker使用特定的语法...

    freemark学习文档

    - **`is_collection`**:判断给定的对象是否是一个集合。 - **`keys`**:获取一个Map类型的对象的所有键。 - **`interpret`**:解析一个字符串为一个表达式并计算其结果。 - **`is_macro`**:判断是否是一个宏。 - *...

    freemark制定excel下载模板示例

    当下载的excel格式内容比较复杂时,用程序生成excel文件就显得力不从心。这时采用excel模板化,更加便捷高效。本资源基于springboot+freemark模板做的示例。只需要了解下freemark基本语法即可。

    Struts2+Freemark

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

    freemark例子

    ${person.name} is ${person.age} years old. ``` 3. **Namespace(命名空间)**: Namespace允许你引用另一个FreeMarker模板文件的资源。通过命名空间,你可以调用其中定义的宏或变量。例如: ```html `...

    freemark模板&模版技术

    FreeMarker 是一个强大的、开源的模板引擎,常用于生成动态Web内容。它允许开发者使用简单的模板语言(Template Language)来分离应用逻辑与展示层,使得前端设计和后端开发可以独立进行,提高了开发效率和代码的可...

    freemark 自定义标签 总结

    自定义标签是Freemarker的一个重要特性,它允许开发者扩展模板语言的功能,以满足特定项目的需求。本篇文章将对Freemarker自定义标签进行深入的总结。 1. **自定义标签基础** 自定义标签在Freemarker中被称为`...

Global site tag (gtag.js) - Google Analytics