ちょうどこれをばねと速度で行いました:
イベントハンドラーを取得する速度を取得する際に問題が発生し、最終的にサーブレット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)を返します。
鉱山はまったく同じですが、ファイルが存在しない場合はnullを返し、パーサーはこの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;
}
}
チャームのように機能します。
お役に立てば幸いです。