这是一个有关IncludeEventHandler的有趣问题。
我正在开发一个基于Spring的应用程序,该应用程序使用的速度具有不同的VENDORS,并且具有单独的投资组合站点。我让供应商通过向他们提供Velocity模板来自定义页面,这些模板正在存储在数据库中,并由速度引擎使用DataSourceResourceLoader进行拾取。
我的表的组织方式类似于this。
供应商可以通过调用宏#parse
并传递其vendorid/template-name
来解析其他模板,使其看起来像这样。
#parse("20160109144/common-css.vm")
现在,实际的问题是根据供应商标识来选择模板。
我有一个类(扩展
IncludeEventHandler
),它覆盖了includeEvent
方法。现在我该怎么做才能返回所需的模板?我不想更改名称并使它们看起来像20160109144/home.vm
最佳答案
关于OP的问题,目的是为DataSourceResourceLoader提供替代行为。
不幸的是,Velocity Engine 1.7版本没有能力更改用于检索模板的SQL语句。
DataSourceResourceLoader扩展了ResourceLoader抽象类。就是说,如果您reference the source,则应该能够实现自定义ResourceLoader,其行为与所需方式相同。
一种选择是,将来自DataSourceResourceLoader的大多数代码组合起来,并更改其确定要从数据库加载的模板内容的方式。
我将转储所有与查询相关的材料,因为您将确定要为内容加载的特定列。 DataSourceResourceLoader本质上将模板的名称映射到数据库条目,并且您的实现本质上围绕着上面定义的规则。
希望可以提供足够的帮助以继续前进。我建议也将其放入调试器,并确定将什么和不将什么传递给相关的加载方法。