如何从freemarker宏中的上下文中获取spring bean?

时间:2016-08-12 12:00:10

标签: java spring spring-mvc macros freemarker

我需要在宏中从WebApplicationContext获取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>

但这是失败的。首先,如果我提供一个bean名称是getBean的字符串,它返回一个我必须以某种方式进行转换的对象,我也尝试提供完全限定的类名,但freemarker不喜欢它。那怎么办呢?

1 个答案:

答案 0 :(得分:0)

我解决这个问题的方法是从控制器传递一个bean然后在宏中使用它。

另外,我建议您在域中使用User实体创建一个相关的宏文件,例如user-macroses.ftl,其中放置了所有与用户相关的宏。

如果在某些宏中你需要调用一些spring bean方法,你应该创建一个像UserFtlMacroses这样的bean来放置用户相关的逻辑,所以当你在视图上调用一些宏<@user.doSomething/>时宏doSomething将从UserFtlMacroses调用方法。