我们正在使用Apache Velocity生成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());
}
});
ReferenceInsertionEventHandler
来完成。
请注意,According to the developer guide for Velocity 2.1: ou may register event handlers in either of two manners. The easiest way to register event handlers is to specify them in velocity.properties. (Event handlers configured in this manner are referred to as "global" event handlers). For example, the following property will escape HTML entities in any inserted reference.
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);
}
});