2016-08-12 6 views
0

マクロでWebApplicationContextからspring beanを取得する必要があります。 私の試みは、次の操作を実行することです:freemarkerマクロのコンテキストからspring beanを取得するには?

<#macro categoryName category> 
    <#assign context=springMacroRequestContext.webApplicationContext> 
    <#assign lb=context.getBean("localizationBean")/> 
    <#assign pp=context.getBean("phraseProvider")/> 
    <#assign categoryName=pp.getPhrase(lb.getCategoryMnemo(category))/> 
    ${categoryName} 
</#macro> 

しかし、これは失敗しています。まず最初に、もし私が何とかキャストしなければならないObjectを返すような文字列のbean名をgetBeanに与えると、完全修飾クラス名を提供しようとしましたが、freemarkerはそれを好まなかったのです。だからそれを行う方法?

+0

FreeMarkerは動的に型指定された言語なので、キャストする必要はありません(存在しません)。なぜあなたはそれをキャストする必要があると思いますか? – ddekany

答えて

0

この問題に対する私の解決策は、コントローラからBeanを渡してマクロで使用することでした。

ドメイン内にたとえばUserエンティティがあり、user-macroses.ftlのような関連するマクロファイルを作成して、すべてのユーザー関連マクロを配置することをお勧めします。

そしてmacrosesのいくつかで、あなたがそうビュー上であなたには、いくつかのマクロを呼び出す<@user.doSomething/>マクロdoSomethingは、メソッドを呼び出します、ユーザー関連のロジックを置くUserFtlMacrosesのようなBeanを作成する必要があり、いくつかのSpring Beanのメソッドを呼び出す必要がある場合UserFtlMacroses

関連する問題