Только что сделал это с пружиной и скоростью:
У меня возникли проблемы со скоростью, с которой я смог обработать свой обработчик событий, в конце концов, указав его в XML-файле сервлета:
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="WEB-INF/templates"/>
<property name="velocityPropertiesMap">
<map>
<entry key="eventhandler.include.class"><value>com.velocity.events.OptionalIncludeEventHandler</value></entry>
</map>
</property>
</bean>
Он просто не примет меня в файл свойств - он создаст экземпляр класса, но не зарегистрирует его в качестве прослушивателя событий. очень расстраивает.
Сам класс прост, довольно вопиющий отрыв от существующего класса скорости "org.apache.velocity.app.event.implementIncludeNotFound". Существующая реализация скорости проверяет наличие файла и, если его нет, возвращает настраиваемую альтернативу (по умолчанию: notfound.vm).
Mine точно такой же, за исключением того, что возвращает ноль, если файл не существует, в результате чего анализатор пропускает эту директиву include / parse:
public class OptionalIncludeEventHandler implements IncludeEventHandler, RuntimeServicesAware {
private RuntimeServices rs;
@Override
public void setRuntimeServices(RuntimeServices rs) {
this.rs = rs;
}
@Override
public String includeEvent(String includeResourcePath, String currentResourcePath, String directiveName) {
return rs.getLoaderNameForResource(includeResourcePath) != null ? includeResourcePath : null;
}
}
Работает как шарм.
Надеюсь, это полезно.