繁体   English   中英

如何从Freemarker宏的上下文中获取Spring bean?

[英]How to get spring bean from context in freemarker macros?

我需要在宏中从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的字符串),它返回一个必须以某种方式进行转换的Object,那么我也试图提供完全合格的类名称,但是freemarker不喜欢它。 那怎么办呢?

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

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

而且,如果在某些宏中需要调用某些Spring bean方法,则应创建一个类似于UserFtlMacroses的bean, UserFtlMacroses在其中放置与用户相关的逻辑,因此在视图上调用某些宏<@user.doSomething/>doSomething宏将调用UserFtlMacroses的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM