【问题标题】:how to use messages with freemarker in spring mvc?如何在spring mvc中使用带有freemarker的消息?
【发布时间】:2011-03-10 10:45:08
【问题描述】:

在 .jsp 中我会使用:

<fmt:message key="welcome.title"/>

显示来自我的 messages.properties 文件的消息。

我将如何使用 freemarker 做到这一点?

【问题讨论】:

    标签: java spring spring-mvc freemarker


    【解决方案1】:

    导入 Spring 宏

    <#import "/spring.ftl" as spring/>
    

    然后

    <@spring.message "yourMessageKeyGoesHere"/>
    

    但是你需要注册ResourceBundleMessageSource

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages"/>
    </bean>
    

    记住 MessageSource 必须调用 messageSource

    【讨论】:

    • 我记得,您可以默认导入模板。 @Blankman:你可以参考 Freemarker 文档。
    • 不错的答案。如果属性文件不在类路径中,请使用 ReloadableResourceBundleMessageSource。
    • 它如何决定使用哪个属性文件(例如 Locale)?
    • 对我不起作用。返回:“找不到名称“spring”的模板。”
    【解决方案2】:

    @布兰克曼

    不,您不必在每个模板中手动导入。您可以在 freemarker 设置中设置 auto_import 属性,如下所示。

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
       ...
    
       <property name="freemarkerSettings">
            <props>
                <prop key="auto_import">spring.ftl as spring</prop>
            </props>
       </property>
    </bean>
    

    【讨论】:

    • 我通过自动导入对 spring.ftl 进行了同样的尝试,它给出了java.io.FileNotFoundException: Template spring.ftl not found
    • 改成/spring.ftl /spring.ftl as spring
    【解决方案3】:

    其他都是很好的答案。为那些使用它的人提供 java config 作为示例。

     @Bean(name = "freemarkerConfig")
    public FreeMarkerConfigurer freemarkerConfig() {
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
        configurer.setTemplateLoaderPaths("/WEB-INF/views/", 'classpath:/templates');
        Map<String, Object> map = new HashMap<>();
        map.put("xml_escape", new XmlEscape());
        configurer.setFreemarkerVariables(map)
        def settings = new Properties()
        settings['auto_import']  =  'spring.ftl as spring,layout/application.ftl as l,/macros/meh.ftl as meh'
        configurer.setFreemarkerSettings(settings)
        log.info "returning freemarker config"
        return configurer;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 2012-07-02
      相关资源
      最近更新 更多