Velocity IncludeEventHandler 困境

Velocity IncludeEventHandler dilemma

这是一个关于 IncludeEventHandler 的有趣问题。

我正在开发一个基于 Spring 的应用程序,该应用程序使用具有不同 VENDORS 的速度,具有单独的投资组合站点。我让供应商通过向他们提供 Velocity 模板来自定义页面,这些模板存储在数据库中并由 Velocity 引擎使用 DataSourceResourceLoader 获取。

我的 table 组织得像 this

供应商可以通过调用宏 #parse 并传递它们的 vendorid/template-name 来解析其他模板,使其看起来像这样。

#parse("20160109144/common-css.vm")

现在真正的问题是根据vendorid 来获取模板。 我有一个覆盖 includeEvent 方法的 class(扩展 IncludeEventHandler)。现在我可以对 return 所需的模板做些什么?我不想更改名称并使它们看起来像 20160109144/home.vm

对于 OP 的问题,其目的是为 DataSourceResourceLoader 提供替代行为。

遗憾的是,Velocity Engine 1.7 版无法更改用于检索模板的 SQL 语句。

DataSourceResourceLoader 扩展了 ResourceLoader abstract class. That said, if you reference the source,您应该能够实现自定义的 ResourceLoader,它的行为方式符合您的要求。

一个选项,glom 大部分来自 DataSourceResourceLoader 的代码,并更改它确定要从数据库加载的模板内容的方式。

我会转储所有与查询相关的 material,因为您将确定要为内容加载的特定列。 DataSourceResourceLoader 本质上将模板名称映射到数据库条目,而您的实现本质上围绕您在上面定义的规则。

希望这能为前进提供足够的帮助。我建议也将它拉入调试器并确定什么是 is-not 传递给相关的加载方法。