文档章节

SpringMVC整合JFinal-enjoy细节及使用addSharedObject添加固定参数

绝对起航
 绝对起航
发布于 2017/09/01 11:03
字数 659
阅读 175
收藏 1

       在使用JFinal3.2的时候发现,JFinal提供的Enjoy Template Engine这个模版工具挺好用,就想集成到SpringMVC中使用。首先,先按照使用文档操作一番。把jsp或freemarker等模版的bean配置替换成enjoy的配置;

       JSP模版

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix" value="/view/" />
     <property name="suffix" value=".jsp" />
</bean>

       Freemarker模版

<!-- freemarker的配置 -->  
    <bean id="freemarkerConfigurer"  
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
        <property name="templateLoaderPath" value="/view/" />  
        <property name="defaultEncoding" value="UTF-8" />  
        <property name="freemarkerSettings">  
            <props>  
                <prop key="template_update_delay">10</prop>  
                <prop key="locale">zh_CN</prop>  
                <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  
                <prop key="date_format">yyyy-MM-dd</prop>  
                <prop key="number_format">#.##</prop>  
            </props>  
        </property>  
    </bean>  
    <!-- FreeMarker视图解析 如返回userinfo。。在这里配置后缀名ftl和视图解析器。。 -->  
    <bean id="viewResolver"  
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
        <property name="viewClass"  
            value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />  
        <property name="suffix" value=".html" />  
        <property name="contentType" value="text/html;charset=UTF-8" />  
        <property name="exposeRequestAttributes" value="true" />  
        <property name="exposeSessionAttributes" value="true" />  
        <property name="exposeSpringMacroHelpers" value="true" />  
        <property name="requestContextAttribute" value="request"/>
    </bean>  

       替换为enjoy的模版

<bean id="viewResolver" class="com.jfinal.template.ext.spring.JFinalViewResolver">
  <property name="devMode" value="true" />//详情见官网
  <property name="sessionInView" value="true" />//详情见官网
  <property name="exposeRequestAttributes" value="true" />//开启这个属性,enjoy才能读取request.setAttribute()中的参数
  <property name="prefix" value="/view/" />
  <property name="suffix" value=".html" />
  <property name="order" value="1" />
  <property name="contentType" value="text/html;charset=utf-8" />
</bean>

       此时,enjoy的基本配置已经完成,可以使用。但会突然间发现,无法像jsp或freemarker那样简单的获取到contextPath这个参数。翻看enjoy的使用手册,发现enjoy提供了一个addSharedObject方法供我们添加参数。个人觉得不应使用拦截器,毕竟只是一个固定参数。我是想在项目加载完成的时候直接加载contextPath这个参数就好。以前一直以为只用在request里面才有这个参数,现在发现容器的ServletContextListener与SpringMVC提供的ApplicationListener<ContextRefreshedEvent>都可以获取到contextPath。毕竟在springMVC中在非Controller获取到request还是比较难的,试了好久都拿不到。首先贴上ServletContextListener的代码。使用ServletContextListener首先要在web.xml中加入listener

  <listener>
       <listener-class>com.springmvc.handler.EnjoyCore</listener-class>
   </listener>
package com.springmvc.handler;
public class EnjoyCore implements ServletContextListener{

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		JFinalViewResolver.engine.addSharedObject("ctx",arg0.getServletContext().getContextPath());
		System.out.println("JFinal-enjoy固定参数加载完成。");
	}

}

若使用ApplicationListener<ContextRefreshedEvent>首先要在配置enjoy的xml的最后加多一行:

<bean id="enjoycore" class="com.springmvc.handler.EnjoyCore"></bean>
package com.springmvc.handler;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import com.jfinal.template.ext.spring.JFinalViewResolver;
public class EnjoyCore implements ApplicationListener<ContextRefreshedEvent>{

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		//if(event.getApplicationContext().getParent()==null)//网上说要这个判断不要重复执行但是我测试了一下,发现这个方法本来就不会重复执行,而且getParent也不会为空
	JFinalViewResolver.engine.addSharedObject("ctx",event.getApplicationContext().getApplicationName());

	}

}

最后,前端只要#(ctx)就可以获取到contextPath了。

© 著作权归作者所有

绝对起航
粉丝 0
博文 10
码字总数 6155
作品 0
广州
私信 提问
Spring Boot 下使用 Jfinal 特性 - SoJpt Boot

SoJpt Boot 介绍 在Spring Boot框架下使用Jfinal特性极速开发 了解更多:www.sojpt.com 在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring Boot中向使用Jfinal一样使用Enjoy、Aop、C...

匿名
04/04
1K
2
SoJpt Boot 2.2-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发

在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring Boot中向使用Jfinal一样使用Enjoy、Aop、Controller等一系列方法(如: getFile(), renderFile....),以及ActiveRecord SoJpt Boot,在...

Sohnny
04/13
1K
12
SoJpt Boot 2.0-3.8 发布,Spring Boot 使用 Jfinal 特性极速开发

SoJpt Boot,在Spring Boot框架下使用Jfinal特性极速开发。 可以在Spring Boot中向使用Jfinal一样使用Enjoy, Aop, controller的一系列方法(如: getFile(), renderFile....),以及ActiveRecor...

Sohnny
04/09
634
0
JFinal 3.2 发布,星星之火已成燎原之势

JFinal第一版于2011年3月诞生于公司内部,应用于公司项目后大受欢迎,一年后于2012年3月18日选择在OSChina社区开源。 历经6年工匠精神的打磨,现已进化成生机勃勃的生态系统,星星之火已成燎...

JFinal
2017/08/08
13.3K
161
JFinal 3.3 发布,天下武功,唯快不破

多年前看过周星驰的电影《功夫》,里头的大 Boss 火云邪神有一句经典台词:天下武功,无坚不破,唯快不破。 周星驰最后通过变得比火云邪神更快,轻松击败火云邪神 在当时我对这句 “天下武功...

JFinal
2017/11/22
20.9K
151

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
15
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部