Java 如何将所有输入转义到Velocity模板

Java 如何将所有输入转义到Velocity模板,java,html,escaping,velocity,Java,Html,Escaping,Velocity,我们使用ApacheVelocity生成HTML,我想在模板的所有输入中添加我自己的转义,而不更改模板。Velocity看起来是可以扩展的,但是我很难在框架中找到自己的方法 您知道是否有一些简单的方法可以在不更改所有模板的情况下转义输入?这可以通过一个实现来完成 EventCartridge eventCartridge = new EventCartridge(); context.attachEventCartridge(eventCartridge); eventCartridge.add

我们使用ApacheVelocity生成HTML,我想在模板的所有输入中添加我自己的转义,而不更改模板。Velocity看起来是可以扩展的,但是我很难在框架中找到自己的方法


您知道是否有一些简单的方法可以在不更改所有模板的情况下转义输入?

这可以通过一个实现来完成

EventCartridge eventCartridge = new EventCartridge();
context.attachEventCartridge(eventCartridge);
eventCartridge.addReferenceInsertionEventHandler(new ReferenceInsertionEventHandler() {
  public Object referenceInsert(String reference, Object value) {
    return escaper.html(value.toString());
  }
});
根据速度2.1:你可以 以两种方式之一注册事件处理程序。最简单的方法 注册事件处理程序是为了在velocity.properties中指定它们。 (以这种方式配置的事件处理程序称为“全局” 事件处理程序)。例如,以下属性将转义为HTML 任何插入引用中的实体

event_handler.reference_insertion.class = org.apache.velocity.app.event.implement.EscapeHtmlReference
请注意,
EscapeHtmlReference
已被弃用。您应该提供自己的实现,可以以类似的方式加载

或者,可以通过以下代码加载处理程序:

InternalEventContext context; // eg. VelocityContext

EventCartridge eventCartridge = new EventCartridge();
if (!eventCartridge.attachToContext(context)) {
    throw new RuntimeException("Velocity context does not support event cartridge");
}

eventCartridge.addReferenceInsertionEventHandler(new ReferenceInsertionEventHandler() {
    @Override
    public Object referenceInsert(Context context, String reference, Object value) {
        return escaper.escape(value);
    }
});

你把它放在哪里?这里的上下文是什么?ServletContext?