1

我想将 XML 文件中的 TemplateMethods 添加到 Freemarker,而不是每次都触及现有的。
使用以下值已经可以做到这一点:

示例 XML:

<example>
    <value1>abc</value>
    <value2>def</value>
</example>

示例模板:

This value1: ${doc.example.value1} and this value2: ${doc.example.value2}

我可以在 xml 中添加任意数量的值并在模板中使用它,而无需更改调用程序。


我如何通过实现来做到这一点TemplateMethodModel,而无需在每次添加/删除时更改我的 Freemarker 代码?

更具体 - 我想做什么:

XML 模型:
包含类和 TemplateMethod 的名称

<templatemethodmodel>
   <method name="intToHex">example.methods.IntToHexMethod</method>
</templatemethodmodel>

模板:
调用IntToHexMethod类的实例

Only an example: ${intToHex(3)}

现在应该可以添加新方法(= 带有名称和类的 xml 条目),而无需触摸我处理模板的 java 代码。

4

1 回答 1

1

如果您想通过 FreeMarker 的 DOM 包装器来实现(即通过将 DOM 对象公开为“doc”),那么您不能这样做(除非您 extends freemarker.ext.dom.NodeModel,但这可能很困难)。但是,如果您真的不需要具有所有与 XML 相关的功能(如 XPath)的 DOM 包装器,您可以从 XML 中创建一个Map(of Map-s of Map-s etc.) 并为模板公开Mapas doc。(或者,您可以编写自己的DOMNode 包装器,将 XML 完全按照您的需要暴露给模板,但这有点复杂。)

于 2012-11-07T17:39:10.327 回答