我需要在宏中从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不喜欢它。那怎么办呢?
答案 0 :(得分:0)
我解决这个问题的方法是从控制器传递一个bean然后在宏中使用它。
另外,我建议您在域中使用User
实体创建一个相关的宏文件,例如user-macroses.ftl
,其中放置了所有与用户相关的宏。
如果在某些宏中你需要调用一些spring bean方法,你应该创建一个像UserFtlMacroses
这样的bean来放置用户相关的逻辑,所以当你在视图上调用一些宏<@user.doSomething/>
时宏doSomething
将从UserFtlMacroses
调用方法。