spring – Velocity IncludeEventHandler的困境

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

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

我的表格像this一样有条理.

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

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

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

最佳答案 有了OP的问题,其意图是为 DataSourceResourceLoader提供替代行为.

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

DataSourceResourceLoader扩展了ResourceLoader抽象类.也就是说,如果你是reference the source,你应该能够实现一个自定义的ResourceLoader,其行为方式与你想要的一样.

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

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

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

点赞