最近想用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,不用任何设置。为什么网上从来没人说过呢。。。
时间: 2024-10-19 13:55:25