Я создаю электронные письма из шаблонов с помощью Velocity в веб-приложении Spring. Теперь мне нужно, чтобы HTML экранировал некоторые значения. Я нашел Velocity Escape Tool. Но я не смог добиться работоспособности конфигурации.
Что я пробовал, так это (spring applicationContext.xml):
UTF-8
UTF-8
application
org.apache.velocity.tools.generic.EscapeTool
Шаблон (htmlEscapeTest.vm):
with escape: $esc.html($needEscape)
TestCase:
@Test
public void testHtmlEscapingSupport() {
final String needEscape = "";
ModelMap model = new ModelMap();
model.addAttribute("needEscape", needEscape);
String result = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, HTML_ESCAPING_TEMPLATE_FILE, model);
assertThat(result, StringContains.containsString("<test>"));
}
Но тест не удался, ... получил: "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.