写在前面
很喜欢Jfinal以及Enjoy的高效、简洁,极大地方便了自己开发项目,希望能在享受Jfinal带来的好处同时,做一点点自己的贡献。
背景是由于公司采用Spring框架,自己查资料加鼓捣,并在波总指导下,完成了SpringBoot集成Enjoy模版,以及配置默认项目访问路径。
SpringBoot配置,手册有详细说明,这里的MyViewResolver 是继承JFinalViewResolver 的类,为了下面能够获取ContextPath
@Configuration public class EnjoyConfig { @Bean(name = "myViewResolver") public MyViewResolver getJFinalViewResolver(){ MyViewResolver jf = new MyViewResolver(); jf.setDevMode(true); jf.setSourceFactory(new ClassPathSourceFactory()); //这里根据自己的目录修改,一般页面放到/templates下面 jf.setPrefix("/public/"); jf.setSuffix(".html"); jf.setContentType("text/html;charset=UTF-8"); jf.setOrder(0); return jf; } }
ctx配置
有时候我们的项目会添加项目路径,这样页面访问资源和Controller时必须带上。Jfinal框架中可以使用 new ContextPathHandler来很方便地添加,和SpringBoot集成的时候可以如下配置
public class MyViewResolver extends JFinalViewResolver implements ApplicationListener<ContextRefreshedEvent> { /** * 添加默认路径 * @param contextRefreshedEvent */ @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { getEngine().addSharedObject("ctx", getServletContext().getContextPath()); } }
ps1:这里实现ApplicationListener接口,是为了在容器初始化完成后再添加ctx对象,不然getServletContext()对象可能取到的是空值。
ps2:SpringBoot使用了spring-boot-devtools热部署的情况下,重启服务时Enjoy模版可能会报错,不能重复添加ctx对象,
这里参考http://www.jfinal.com/share/457,进行配置后正常
在META-INF文件夹下新建spring-devtools.properties文件,内容为restart.include.thirdparty=/enjoy-3.3.jar
ps3:一般将静态文件放到static文件夹下,SpringBoot默认将static目录下的文件映射到/根路径,这样比如在页面的css、js引入地址时,前面加了/static/css的话是无法访问的,
需要去掉/static,通过以下配置后,不用进行修改:
/** * WebMvc适配器 * @author lizh * @date 2017/7/26. */ @Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //将所有/static/** 访问都映射到classpath:/static/ 目录下 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } }