题 如何在spring中获取freemaker模板中的请求上下文


如何获取请求上下文路径 freemarker 使用时的模板 spring

我的观点解析器是这样的

    <bean id="freeMarkerViewResolver" class="learn.common.web.view.FreemarkerViewResolver">
        <property name="order" value="1" />
        <property name="viewClass"
        value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <property name="suffix" value=".ftl" />
        <property name="cache" value="false" />
    </bean>

我的观点解析 learn.common.web.view.FreemarkerViewResolver 扩展 org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver


27
2017-08-08 15:57


起源




答案:


在视图解析器中,您可以添加以下属性

<property name="requestContextAttribute" value="rc"/>

然后在您的freemarker模板中,您可以获得请求上下文补丁

${rc.getContextPath()}

37
2017-08-08 15:59



或者,您可以使用$ {rc.contextPath}来保存更多字符(至少在Spring 3中)。 - Glenn Barnett
是什么类型的 rc 参数? - EliuX


如果您的要求是在FTL视图中获取上下文路径,那么Spring提供了更好的替代方案 - 首先在视图中导入spring.ftl

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

然后使用宏@ spring.url获取要使上下文感知的URL -

<li id="history"><a href="<@spring.url '/rest/server/taskHistory'/>">History</a></li>

这非常相似 -

<li id="history"><a href="${rc.getContextPath()}/rest/server/taskHistory">History</a></li>

其中rc在viewResolver中定义

基于XML的配置

<property name="requestContextAttribute" value="rc"/>

或Spring Boot样式配置(aplication.yml)

spring.freemarker.request-context-attribute: rc

6
2017-11-27 02:45



或者,如果您使用Spring Boot,则可以使用 springMacroRequestContext 变量: <link rel="stylesheet" href="${springMacroRequestContext.contextPath}/webjars/bootstrap/3.3.7/css/bootstrap.min.css">。或者设定 spring.freemarker.request-context-attribute=rc 在app属性中然后使用 ${rc.contextPath} 在任何模板中。 - djxak