gpt4 book ai didi

java - 如何使用 Spring Properties 配置 Velocity Escape Tool?

转载 作者:IT老高 更新时间:2023-10-28 13:43:30 25 4
gpt4 key购买 nike

我在 Spring Web 应用程序中通过 Velocity 从模板创建电子邮件。现在我需要对一些值进行 HTML 转义。我找到了速度 Escape Tool .但我没有让配置工作。

我尝试过的是(spring applicationContext.xml):

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="resourceLoaderPath" value="classpath:/velocity/emailTemplates" />
<property name="preferFileSystemAccess" value="false" />
<property name="overrideLogging" value="true" />
<property name="velocityProperties">
<util:properties>
<prop key="input.encoding">UTF-8</prop>
<prop key="output.encoding">UTF-8</prop>
<prop key="tools.toolbox">application</prop>
<prop key="tools.application.esc">org.apache.velocity.tools.generic.EscapeTool</prop>
</util:properties>
</property>
</bean>

模板(htmlEscapeTest.vm):

with escape: $esc.html($needEscape)

测试用例:

@Test
public void testHtmlEscapingSupport() {

final String needEscape = "<test>";

ModelMap model = new ModelMap();
model.addAttribute("needEscape", needEscape);
String result = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, HTML_ESCAPING_TEMPLATE_FILE, model);
assertThat(result, StringContains.containsString("&lt;test&gt;"));
}

但是测试失败了,...得到:“with escape: $esc.html($needEscape)”

谁能告诉我我做错了什么?


如果我在测试中添加 new EscapeTool() 显式:

VelocityContext velocityContext = new VelocityContext(model);
velocityContext.put("esc", new EscapeTool());
StringWriter writer = new StringWriter();
velocityEngine.mergeTemplate(HTML_ESCAPING_TEMPLATE_FILE, velocityContext, writer);
String result = writer.toString();

然后它正在工作。但据我了解文档,这些工具应该在属性文件中配置一次。

我正在使用 Velocity Engine 1.7 和 Velocity Tools 2.0。

最佳答案

您不能直接在 VelocityEngine 中配置工具。相反,您所做的是,当您使用 VelocityEngineUtils 时,您会在模型映射中传递任何工具:

ModelMap model = new ModelMap();
model.put("esc", new EscapeTool());
VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "template.vm", "UTF-8", model)

或者,如果您直接使用 VelocityEngine,您可以这样做:

VelocityContext velocityContext = new VelocityContext(model);
velocityEngine.mergeTemplate(templateLocation, encoding, velocityContext, writer);

关于java - 如何使用 Spring Properties 配置 Velocity Escape Tool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com