現在、scriptTemplateConfigはコンテキストから取得されるため、ScriptTemplateViewに特定のScriptTemplateConfigurerを強制的に使用させる方法はありません。
これは、scriptTemplateViewプロパティにscriptTemplateConfigプロパティを追加することで簡単にオーバーライドできます。そこでここでは、カスタムScriptTemplateViewです:
public class MyScriptTemplateView extends ScriptTemplateView {
private ScriptTemplateConfig scriptTemplateConfig;
public void setScriptTemplateConfig(ScriptTemplateConfig scriptTemplateConfig) {
this.scriptTemplateConfig = scriptTemplateConfig;
}
@Override
protected ScriptTemplateConfig autodetectViewConfig() throws BeansException {
ScriptTemplateConfig res = scriptTemplateConfig;
if (res == null) {
res = super.autodetectViewConfig();
}
return res;
}
}
必要とされている別の増強は、このビューにscriptTemplateConfigを設定しています。私は、カスタムビューリゾルバでこれを行うと創造に表示し、それを設定しています:
public class MyScriptTemplateViewResolver extends ScriptTemplateViewResolver {
private ScriptTemplateConfig scriptTemplateConfig;
public void setScriptTemplateConfig(ScriptTemplateConfig scriptTemplateConfig) {
this.scriptTemplateConfig = scriptTemplateConfig;
}
@Override
protected AbstractUrlBasedView buildView(String viewName) throws Exception {
MyScriptTemplateView view = (MyScriptTemplateView) super.buildView(viewName);
view.setScriptTemplateConfig(scriptTemplateConfig);
return view;
}
@Override
protected Class<?> requiredViewClass() {
return MyScriptTemplateView.class;
}
}
最後に、我々はViewResolverにコンフィギュラを渡すことによって、このようなものを使用することができます。
@Bean
public ScriptTemplateConfigurer kotlinConfigurer() {
ScriptTemplateConfigurer configurer = new ScriptTemplateConfigurer();
configurer.setEngineName("kotlin");
configurer.setScripts("scripts/render.kts");
configurer.setRenderFunction("render");
configurer.setSharedEngine(false);
return configurer;
}
@Bean
public ViewResolver kotlinViewResolver(ScriptTemplateConfigurer kotlinConfigurer) {
MyScriptTemplateViewResolver viewResolver = new MyScriptTemplateViewResolver();
viewResolver.setPrefix("templates/");
viewResolver.setSuffix(".kts");
viewResolver.setScriptTemplateConfig(kotlinConfigurer);
return viewResolver;
}
あなたがサンプルin the repoを確認することができます