Srping Boot FreeMarker获取ContextPath-自定义ViewResolver以及超简单内置方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Srping Boot FreeMarker获取ContextPath-自定义ViewResolver以及超简单内置方法相关的知识,希望对你有一定的参考价值。

最近想用spring boot+freemarker做个新项目,在学习的过程中有一个地方真是把我坑惨了。那就是contextPath的获取。这个之前在jsp里实在是太简单了,然后我以为在ftl中也一样(最终结果告诉我确实也一样),但是中间的过程实在有点,,浪费时间。

不过还好自己尝试加上搜索解决了这个问题。有两个方法:

一,自定义ViewResolver

百度freemarker + contextPath,大多数人都会告诉你在配置文件中配置

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

 然后页面:

${request.contextPath}

 就可以了。说起来这个确实是正确的方法,但是spring boot没有配置文件。。这要往哪儿改。经过一番艰苦卓绝的百度,我知道了ViewResolver这个东西,这个和配置文件中的配置视图解析器功能是一样的。于是就依葫芦画瓢,写了一个自定义的FreeMarker视图解析器,照着上面给的教程写了一下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

/**
 * Created by zhangpeng on 16-6-15.
 */
@Configuration
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public FreeMarkerViewResolver freeMarkerViewResolver() {
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setPrefix("");
        resolver.setSuffix(".ftl");
        resolver.setContentType("text/html; charset=UTF-8");
        resolver.setRequestContextAttribute("rc");
        return resolver;
    }
}

 然后在ftl中:

${rc.contextPath}

 完美解决。

注意一定要是FreeMarkerViewResolver,不能是其他,不然没有用。

 

二,spring自己提供的方法

 

说起这个真是泪流满面啊,方法一折腾了半天,虽然最终也解决了,但是感觉也挺啰嗦的。

然后我在idea里面的ftl页面中随便打了打,看看有没有什么提示,结果提示了有springMacroRequestContext这个内置对象。其实我也不知道这是什么玩意儿,就输入了个.想看看会有什么属性和方法。悲剧来了,智能提示的第一个就是contextPath。。。

合着我辛辛苦苦搞了半天,你这自己内置的就有啊!!真是一万匹草泥马飘过。。。

${springMacroRequestContext.contextPath}

 就是这一句,可以直接获取到contextPath,不用任何设置。为什么网上从来没人说过呢。。。

 

以上是关于Srping Boot FreeMarker获取ContextPath-自定义ViewResolver以及超简单内置方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot Freemarker 获取ContextPath的方法

Spring Boot:Spring Boot整合FreeMarker

Spring Boot基础6-web应用开发-模板引擎FreeMarker

Srping Security —— FormLogin

Spring Boot2 系列教程Spring Boot 整合 Freemarker

Spring Boot(24)——使用Freemarker视图