配置 DataSourceResourceLoader

Configuring the DataSourceResourceLoader

参考我的 ,我想知道如何配置 DatasourceResourceLoader 以满足我的要求。

更具体地说,我是这样调用 #parse() 宏的。

#parse("$vendorid/template-name.vm")

我的 table 从中挑选模板的组织方式类似于

如何解释 #parse() 宏以仅选择针对特定 vendorid 放置的模板。

请注意以下几点:

  1. 我不想更改 table 结构或 name 列的值。
  2. name 列可能包含冗余值,但 vendoridname 的组合永远不会相同。

编辑

我知道 Velocity 的 IncludeEventHandler,如果我可以通过覆盖此事件来解决我的问题,我该怎么做?

Velocity 的 IncludeEventHandler 无法解决您的问题,因为它只能更改资源的路径,而不能获取资源本身。

不过,您可以在数据库端创建一个视图,让您可以完全按照自己的需要获取模板:

CREATE VIEW templates_view (id VARCHAR(100), html CLOB, ts DATETIME)
AS SELECT CONCAT(vendorid, '/', name) FROM templates;

这是 MySQL 语法,对于其他引擎,您将使用 TIMESTAMP 类型 and/or ||连接运算符,根据需要...

这样您就可以通过一个键列访问您的模板,并可以初始化 DatasourceResourceLoader 以使用此视图。

根据 回复,使用 ResouceLoader 扩展 class 并将其用作 DataSourceResourceLoader 可以无缝工作。