Actuellement scriptTemplateConfig est extrait du contexte, il n'y a donc aucun moyen de forcer ScriptTemplateView à utiliser ScriptTemplateConfigurer spécifique.
Mais cela peut être facilement remplacé en ajoutant la propriété scriptTemplateConfig à ScriptTemplateView. Voici donc le ScriptTemplateView personnalisé:
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;
}
}
Une autre amélioration qui est nécessaire est la mise scriptTemplateConfig à ce point de vue. Je fais cela dans résolveur vue personnalisée et la mise à vue sur la création:
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;
}
}
Enfin, nous pouvons utiliser ce genre de choses en passant configurateur à 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;
}
Vous pouvez vérifier un échantillon in the repo