Velocity IncludeEventHandler困境

时间:2016-01-09 13:23:33

标签: spring velocity

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

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

我的表格有点像this

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

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

现在实际问题是根据vendorid获取模板。 我有一个类(扩展IncludeEventHandler),它覆盖了includeEvent方法。现在我该怎么做才能返回所需的模板?我不想更改名称,使它们看起来像20160109144/home.vm

1 个答案:

答案 0 :(得分:1)

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

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

DataSourceResourceLoader扩展了ResourceLoader抽象类。也就是说,如果你reference the source,你应该能够实现一个行为符合你想要的自定义ResourceLoader。

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

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

希望能为前进提供足够的帮助。我建议在调试器中将其拉出来,并确定什么是和没有传递给相关的加载方法。