2017-01-16 2 views
0

Spring MVCアプリケーションで2つの異なるテンプレートビューリゾルバを使用したいと思います。たとえば、kotlinとjavascriptを同時に使用します。 2つのViewResolver Beanの作成は問題ではありません。 ScriptTemplateConfigがSpringのコンテキストからScriptTemplateConfig.classによってScriptTemplateView.autodetectViewConfigに取得されているため、2つのScriptTemplateConfigurerを使用することは不可能です。Spring MVCアプリケーション内の複数のScriptTemplateViewResolvers

同時に2つのスクリプトエンジンを使用する方法がありますか、またはこの機能は現在サポートされていませんか?

答えて

0

現在、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を確認することができます

関連する問題