假如在两个vm文件中,a.vm和b.vm,这两个vm文件分别独立,并且分别在这两个vm里面都包含了一个宏叫jsonlist,宏的名称和参数都一样,但是宏内容不一样。那么是不是a.vm和b.vm里面使用的都是各自vm文件里包含的宏呢?
今天在项目中发现,a.vm里面调用jsonlist这个宏的时候调用的不是a.vm文件里面的这个宏,而是b.vm文件里面的jsonlist的这个宏?很奇怪,为什么a.vm里面没有包含b.vm文件啊,怎么会调用到b.vm文件里面的宏呢?然后再做了下测试,重启服务器后,我先访问a.vm这个页面,这是a.vm调用的是a.vm里面的这个宏了,而不是b.vm里面的这个宏了,然后我接着去访问b.vm这个页面,此时b.vm里面调用到的jsonlist这个宏却成了a.vm里面的jsonlist这个宏了。
我用的是tomcat服务器,以此断定,velocity加载的时候是每次访问一个页面,发现这个页面有宏的时候,就把这个页面所有的宏load到服务器中,不是一开始就加载所有的宏,然后下次再访问其它页面的时候,发现如果存在同样名称和参数的宏,那么它不会再加载这个宏到服务器中,所以下次其它页面用到的宏都是第一次加载进来的名称相同的那个宏,后面名称相同的都不会再加载进来。
所以velocity中不能存在名称相同内容不能的多个宏,否则由于访问页面顺序的不同,加载的宏顺序也不同,而服务器只加载第一次用到的那个宏,这种就会出现不可预知的问题。
分享到:
相关推荐
在这个版本中,Velocity提供了基本的模板引擎功能,包括变量替换、控制结构(如if、for、foreach)以及宏定义等。它支持JavaBean和Map对象的直接引用,并且通过Action接口可以方便地进行用户自定义操作。此外,...
4. **宏**:Velocity支持宏定义,宏类似于函数,可以在模板中重复使用,提高代码复用性。 5. **事件驱动的处理机制**:Velocity 提供了一套事件驱动的处理机制,允许用户自定义处理器对模板进行预处理或后处理,如...
- **Velocity**也有类似的宏定义`#macro(name param1 param2) ... #end`,但功能相对有限。 5. **转义**: - **FreeMarker**内置了多种转义功能,比如HTML转义、XML转义等,可以通过简单的指令实现。 - **...
velocity.properties是Velocity的配置文件,用于设置Velocity运行时的各种属性,比如模板加载路径、缓存设置等。用户可以根据需要在该文件中配置相关属性,以优化Velocity在应用中的表现。 #### toolbox.xml工具箱...
在这个示例中,我们将深入理解如何在 Velocity 模板中实现分页宏。 分页宏的主要目的是展示数据的多个页面链接,让用户能够轻松浏览不同页的数据。在给定的代码中,`#macro(pager $url $pager)` 定义了一个名为 `...
5. **宏库支持**:Velocity支持宏定义,插件可以帮助开发者管理和重用这些宏,提高代码复用率。 要安装Eclipse中的Velocity插件,你可以按照以下步骤操作: 1. 打开Eclipse,选择菜单栏的“Help” -> “Eclipse ...
4. **宏**:Velocity 支持宏定义,类似于 HTML 中的自定义标签,可以复用和封装代码,增强模板的模块化。 5. **指令集**:Velocity 提供了多种内置指令,如 #if, #foreach, #set 等,用于控制流程和处理数据。 ** ...
【 Velocity 插件详解】 Velocity 是一款基于 Java 的模板引擎,它被广泛应用于 Web 开发中,特别是作为 Apache Struts 和 Spring MVC 框架的一部分。Velocity 插件则是为了在开发环境中提供对 Velocity 模板语言的...
这两个指令属于Velocity Tools的扩展,如果你的项目中引入了Velocity Tools,可以通过在`velocity.properties`文件中添加以下配置来启用它们: ```properties userdirective = org.apache.velocity.tools.generic....
6. 引用资源:Velocity可以使用`#resource`指令加载外部资源,如模板文件。 ** Velocity模板引擎的应用 ** 1. Web应用:Velocity常被用于MVC框架中,作为视图层的模板引擎,将数据模型与HTML模板结合,生成动态...
- 配置Velocity引擎涉及到设置资源加载器、缓存策略、错误处理以及自定义指令等。 - 通过调整配置,可以优化Velocity的性能和适应不同项目需求。 5. **Velocity与MVC模式** - 在Model-View-Controller架构中,...
3. **Velocimacro**:Velocity宏,是一种可重用的模板片段,可以提高模板的复用性和可维护性。 4. **Directives**:控制流指令,如#if、#foreach等,用于在模板中实现条件判断和循环。 五、 Velocity-1.6.zip内容...
理解 Velocity的内部工作原理,例如模板加载机制和指令处理流程,可以帮助我们更好地优化性能。 总之,Velocity是一个强大的模板引擎,它简化了Web应用的开发流程,提高了开发效率。通过深入学习和实践,我们可以...
`eclipse相关插件`,虽然不是必需的jar包,但对于使用Eclipse作为IDE的开发者来说,可能需要安装Velocity支持的Eclipse插件,如Velocity视图插件,它能提供模板语法高亮和代码完成等功能,提高开发效率。 为了正确...
3. **Resource Loader**:扩展了Velocity的资源加载机制,使其能够从多种来源(如文件系统、数据库等)加载模板。 4. **MVC框架集成**:如Struts、Spring MVC等,提供与这些流行MVC框架的集成。 在实际项目中,将...
将两者结合,我们可以利用`Velocity`的模板能力来动态生成PDF内容,这在SpringMVC框架中尤其方便。 `iText`库提供了一系列API,用于创建PDF文档、添加文字、图像、表格等元素。它支持流式和模型两种模式,前者适用...
3. **宏定义与调用**:Velocity支持宏,类似于函数,可以重复使用一段模板代码。通过`#macro`定义宏,`#invoke`或`#m`调用宏。 4. **内置方法**:Velocity提供了一些内置的方法,如`escape()`用于转义特殊字符,`...
2. **加载模板**:使用`VelocityReader`或`ResourceLoader`加载模板文件。 3. **合并上下文和模板**:通过`VelocityTemplate.merge(context, writer)`方法,将上下文中的数据与模板结合,生成最终的输出。 4. **输出...
文档是velocity基本知识,语法运用,宏定义等,适合新手入门
这段代码创建了一个Velocity上下文,添加了一个名为"name"的变量,并加载了一个名为"hello.vm"的Velocity模板。然后,模板与上下文合并,并将结果写入HTTP响应。 **4. 模板文件(hello.vm)** 模板文件通常包含HTML...