4

在过去的一年里,我听到了很多关于 Velocity 和 NVelocity 的信息。阅读他们的文档并在网上进行搜索并没有给我想要的答案。

在什么情况下我会在我的开发中使用这个库?它解决了哪些尚未解决的问题?

4

6 回答 6

8

自从 Web 应用程序出现以来,人们就开始考虑在许多应用程序中分离关注点,包括 Web 应用程序。挑战在于将视图代码与业务代码或逻辑代码分开。jsps刚出现时,很多人直接在jsps中编写大量逻辑(数据库访问等),打破了关注点分离的基本原则(jsps应该负责呈现,而不是逻辑)。

Velocity、Freemarker 等都是模板引擎,允许分离 UI 逻辑和业务逻辑,从而促进呈现的变化,同时最大限度地减少业务方面的变化。这些模板引擎具有执行常见 UI 任务的工具,例如在某些条件成立时显示一个 html 块,或者在维护视图之外的逻辑代码的同时迭代列表。这是长期维护复杂应用程序的基础。

于 2009-02-02T17:11:26.287 回答
4

我认为重要的是要指出,与作为模板机制的 JSP/ASP.NET 相比,Velocity/NVelocity 真正“强制”关注的分离。

对于 JSP/ASP.NET 的 <% .. %>,任何 Java/.NET 代码都是允许的。这就是为什么有时您确实会在这些文件中看到业务逻辑代码的原因。

使用 Velocity/NVelocity,您无法嵌入长系列的代码。相反,您确实被迫传入计算值,Velocity/NVelocity 会根据模板的设计方式拾取并显示它们。

另一点是它们可以在 Web 容器环境之外工作(至少 Velocity 可以 AFAIK)。假设您使用 JSP/ASP.NET 设计了一个报告模板。它在网络上运行良好。然后突然有一个更改请求要从桌面应用程序完成。您可以初始化 Velocity/NVelocity,计算值,然后渲染模板,而不是在其中嵌入 Web 容器。

于 2009-02-03T02:39:38.307 回答
3

它是一个模板引擎。如果您有很多混合了可变内容的静态文本,那么模板是减少您必须做的工作量的好方法。它比 String.Format 或大量串联要好得多,因为它不那么重复或容易出错,而且更易于维护,因为您只需查看它就可以准确地确定模板的作用。

于 2009-02-02T17:08:59.020 回答
0

我们使用模板为生产、UAT、系统测试、应急系统等生成配置文件。

我们有一个主 Spring 配置文件,我们将一个属性文件注入其中。我们有一个由 Velocity 解析的主属性文件,这允许我们将所有系统设置保存在一个文件中。

于 2009-02-02T22:01:31.207 回答
0

作为奖励,对于那些感兴趣的人,我建议阅读以下内容:

这些是关于 StringTemplate 的链接,这是由 Terence Parr 编写的模板引擎,antlr 是一种无处不在的解析器(例如:hibernate 使用 antlr)。

于 2009-02-03T10:54:57.793 回答
0

1 - Velocity 引擎实际上将实时数据xyz.vm保存静态信息
的文件合并2 - vm 文件使用 Velocity 模板语言(VTL) (它可以迭代放置在上下文中的 java 可迭代 java 对象,可以调用可访问的方法通过放置在上下文中的对象)

使用 Velocity 的情况 - 将 java 的强大功能带到 html不仅仅是 html
1-当您必须经常生成具有不同数据和恒定样式的报告邮件时。(foreach 支持)
2-当您想要将实时数据与虚拟占位符合并到深度嵌套的内容中
3-当您想根据数据的值决定样式信息时(如果其他支持)
还有更多
参考 - http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html

于 2013-12-23T13:37:45.183 回答