如何在 Freemarker 模板中访问 java 库 类
How to access java library classes in Freemarker template
我正在使用 smooks 库进行 XML 到 XML 的转换。以下是 smooks 配置。在 freemarker 模板中,我想访问 jdk 库 类 以及我在项目中创建的 类。请告诉我如何实现这一目标。
<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.3.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<core:filterSettings type="SAX" defaultSerialization="false" />
<resource-config selector="Order">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
<ftl:freemarker applyOnElement="Order">
<ftl:template>
<!--
<#assign x="${Order.OrderLines.OrderLine[0].@FulfillmentType}">
<order requestNumber="${Order.@OrderNo}"
customerEmail="${Order.@CustomerEMailID}"
orderNumber="${Order.@CustomerPONo}"
dateTimePlaced="${Order.@OrderDate}"
shipNodeID="${Order.@ShipNode}"
<#if x == "S2H" >
deliveryType="SHIPTOHOME"
</#if>
>
</order>-->
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>
访问Java对象和类(对于静态实用程序)应该由调用者通过数据模型(模板上下文)提供。我想 Smooks 不会这样做。但是如果您被允许在 Smooks 下配置 FreeMarker,那么您可以将所谓的 "shared variables" 添加到 FreeMarker 配置中,这将适用于所有模板,而无需将它们添加到数据模型中(参见 freemarker.template.Configuration.setSharedVariable()
).作为最后的手段,你可以使用类似 'com.example.MyObjectProvider'?new()
的东西来走私你的 Java 对象,其中 MyObjectProvider
实现 TemplateMethodModelEx
(或任何其他 TemplateModel
接口)。
我正在使用 smooks 库进行 XML 到 XML 的转换。以下是 smooks 配置。在 freemarker 模板中,我想访问 jdk 库 类 以及我在项目中创建的 类。请告诉我如何实现这一目标。
<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"
xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.3.xsd"
xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd">
<core:filterSettings type="SAX" defaultSerialization="false" />
<resource-config selector="Order">
<resource>org.milyn.delivery.DomModelCreator</resource>
</resource-config>
<ftl:freemarker applyOnElement="Order">
<ftl:template>
<!--
<#assign x="${Order.OrderLines.OrderLine[0].@FulfillmentType}">
<order requestNumber="${Order.@OrderNo}"
customerEmail="${Order.@CustomerEMailID}"
orderNumber="${Order.@CustomerPONo}"
dateTimePlaced="${Order.@OrderDate}"
shipNodeID="${Order.@ShipNode}"
<#if x == "S2H" >
deliveryType="SHIPTOHOME"
</#if>
>
</order>-->
</ftl:template>
</ftl:freemarker>
</smooks-resource-list>
访问Java对象和类(对于静态实用程序)应该由调用者通过数据模型(模板上下文)提供。我想 Smooks 不会这样做。但是如果您被允许在 Smooks 下配置 FreeMarker,那么您可以将所谓的 "shared variables" 添加到 FreeMarker 配置中,这将适用于所有模板,而无需将它们添加到数据模型中(参见 freemarker.template.Configuration.setSharedVariable()
).作为最后的手段,你可以使用类似 'com.example.MyObjectProvider'?new()
的东西来走私你的 Java 对象,其中 MyObjectProvider
实现 TemplateMethodModelEx
(或任何其他 TemplateModel
接口)。