`
ligf06
  • 浏览: 102973 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Jeecms源码分析(三)

阅读更多

本节主要分析Spring + FreeMarker的集成。


先介绍一下 spring+freemarker的集成主要涉及以下配置项:

1、配置 FreeMarkerConfigurer

<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">         ……    </bean>
 

通过 freemarkerSettings 属性,也能够设置其他 FreeMarker 的配置。例如, FreeMarker 默认每隔 5 秒检查模板是否被更新,如果已经更新了,就会重新加载并分析模板。但经常检查模板是否更新可能比较耗时。如果你的应用运行在生产模式下,而且你预期模板不会经常更新,则可以将更新的延迟时间延长至一个小时或者更久。

可以通过为 freemarkerSettings 属性设置 template_update_delay 达到这一目的。例如:

 

 <property name="freemarkerSettings">

      <props>

        <prop key="template_update_delay">3600</prop>

      </props>

    </property>
 

设置 template_update_delay 3600 (秒),因此 FreeMarker 只有在 1 个小时之后才检查模板是否更新。

 

2、解析 FreeMarker 视图

<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

    <property name="suffix"><value>.ftl</value></property>

  </bean>
 

将请求和会话属性作为变量暴露给 FreeMarker 模板使用。要做到这一点,可以设置 exposeRequestAttributes 或者 exposeSessionAttributes true

<property name="exposeRequestAttributes">

      <value>true</value>

    </property>

    <property name="exposeSessionAttributes">

      <value>true</value>

    </property>

 
 

使用这些宏,必须设置 FreeMarkerViewResolver exposeMacroHelpers 属性为 true

 

<property name="exposeSpringMacroHelpers">

      <value>true</value>

    </property>
 

 

3、 FreeMarker 中绑定表单域

 

<@spring.bind "command.phone" />

  phone: <input type="text"

      name="${spring.status.expression}"

      value="${spring.status.value}">

  <font color="#FF0000">${spring.status.errorMessage}</font><br>

 

  <@spring.bind "command.email" />

      email: <input type="text"

      name="${spring.status.expression}"

      value="${spring.status.value}">

  <font color="#FF0000">${spring.status.errorMessage}</font><br>

 
 

4、最后,你还需要做一件事才能使用FreeMarker

<@spring.bindEscaped>的FreeMarker模板的顶部增加以下一行:

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

 
 

这一行会在模板中导入Spring的FreeMarker宏。

 

 

 

 

Jeecms中相关的配置文件如下----------------->:

总体说明:

 

1、定义FreeMaker引入文件,index.ftl前缀为p,spring.ftl的前缀为s,这样在饮用ftl模版的宏定义时,可以简略使用。

 

<prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s</prop>

 在html表单中的使用,例如:

 

<div class="body-box">
<@p.form id="jvForm" action="o_update.do" labelWidth="12">
<@p.td 
。。。。
</div>

 

2、在jeecms中,请求回话属性都不允许暴露给freemarker使用。。(不知道是否跟freemarker不支持集群有关系????这样是否可以支持集群

 

....

	<property name="exposeRequestAttributes" value="false"/>
	<property name="exposeSessionAttributes" value="false"/>
....

 

以下是涉及到的配置文件:

  • web.xml 中的配置文件
....
       <context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/config/application-context.xml
			/WEB-INF/config/cache-context.xml
			/WEB-INF/config/captcha-context.xml
			/WEB-INF/config/jeecore-context.xml
			/WEB-INF/config/jeecms-context.xml
		</param-value>
	</context-param>

....
  • jeecms-context.xml

在这个配置文件中,freeMarkerConfigurer作为 StaticPageSvcImpl的一个属性,注入到这个类中。

freeMarkerConfigurer的配置包括freemarker定义的标签(见freemarkerVariables),freemarkerSettings中定义了一些详细的属性。

详见前面的描述。

<bean id="staticPageSvc" class="com.jeecms.cms.staticpage.StaticPageSvcImpl">
		<property name="tplMessageSource" ref="tplMessageSource"/>
		<property name="freeMarkerConfigurer">
			<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
				<property name="freemarkerVariables">
					<map>
						<entry key="uuid" value-ref="uuid"/>
						<entry key="process_time" value-ref="process_time"/>
						<entry key="text_cut" value-ref="text_cut"/>
						<entry key="html_cut" value-ref="html_cut"/>
						<entry key="cms_pagination" value-ref="cms_pagination"/>
						<entry key="cms_channel_list" value-ref="cms_channel_list"/>
						<entry key="cms_channel_page" value-ref="cms_channel_page"/>
						<entry key="cms_channel" value-ref="cms_channel"/>
						<entry key="cms_content" value-ref="cms_content"/>
						<entry key="cms_content_list" value-ref="cms_content_list"/>
						<entry key="cms_content_page" value-ref="cms_content_page"/>
						<entry key="cms_tag_list" value-ref="cms_tag_list"/>
						<entry key="cms_tag_page" value-ref="cms_tag_page"/>
						<entry key="cms_topic_list" value-ref="cms_topic_list"/>
						<entry key="cms_topic_page" value-ref="cms_topic_page"/>
						<entry key="cms_comment_list" value-ref="cms_comment_list"/>
						<entry key="cms_comment_page" value-ref="cms_comment_page"/>
						<entry key="cms_guestbook_ctg_list" value-ref="cms_guestbook_ctg_list"/>
						<entry key="cms_guestbook_list" value-ref="cms_guestbook_list"/>
						<entry key="cms_guestbook_page" value-ref="cms_guestbook_page"/>
						<entry key="cms_vote" value-ref="cms_vote"/>
						<entry key="cms_friendlink_ctg_list" value-ref="cms_friendlink_ctg_list"/>
						<entry key="cms_friendlink_list" value-ref="cms_friendlink_list"/>
						<entry key="cms_lucene_list" value-ref="cms_lucene_list"/>
						<entry key="cms_lucene_page" value-ref="cms_lucene_page"/>
						<entry key="cms_advertising" value-ref="cms_advertising"/>
					</map>
				</property>
				<property name="templateLoaderPath" value=""/>
				<property name="freemarkerSettings">
					<props>
						<prop key="tag_syntax">auto_detect</prop>
						<prop key="template_update_delay">5</prop>
						<prop key="defaultEncoding">UTF-8</prop>
						<prop key="url_escaping_charset">UTF-8</prop>
						<prop key="locale">zh_CN</prop>
						<prop key="boolean_format">true,false</prop>
						<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
						<prop key="date_format">yyyy-MM-dd</prop>
						<prop key="time_format">HH:mm:ss</prop>
						<prop key="number_format">0.######</prop>
						<prop key="whitespace_stripping">true</prop>
						<prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s</prop>
					</props>
				</property>
			</bean>
		</property>
	</bean>
 
  • jeecms-servlet-admin.xml

   view resolver 配置:

<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.RichFreeMarkerViewResolver">
		<property name="prefix" value="/jeecms_sys/"/>
		<property name="suffix" value=".html"/>
		<property name="contentType" value="text/html; charset=UTF-8"/>
		<property name="exposeRequestAttributes" value="false"/>
		<property name="exposeSessionAttributes" value="false"/>
		<property name="exposeSpringMacroHelpers" value="true"/>
	</bean>
 

freemarkerConfig 配置:

	<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF"/>
		<property name="freemarkerVariables">
			<map>
				<!--在FCK编辑器中需要用到appBase,以确定connector路径。-->
				<entry key="appBase" value="/jeeadmin/jeecms"/>
				<!--后台管理权限控制-->
				<entry key="cms_perm" value-ref="cms_perm"/>
				<entry key="text_cut" value-ref="text_cut"/>
				<entry key="html_cut" value-ref="html_cut"/>
			</map>
		</property>
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">0</prop>
				<prop key="defaultEncoding">UTF-8</prop>
				<prop key="url_escaping_charset">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="boolean_format">true,false</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
				<prop key="date_format">yyyy-MM-dd</prop>
				<prop key="time_format">HH:mm:ss</prop>
				<prop key="number_format">0.######</prop>
				<prop key="whitespace_stripping">true</prop>
				<prop key="auto_import">/ftl/pony/index.ftl as p,/ftl/spring.ftl as s</prop>
			</props>
		</property>
	</bean>
 
  • jeecms-servlet-front.xml ,

view resolver 配置:

 

	<bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.SimpleFreeMarkerViewResolver">
		<property name="contentType" value="text/html; charset=UTF-8"/>
		<property name="exposeRequestAttributes" value="false"/>
		<property name="exposeSessionAttributes" value="false"/>
		<property name="exposeSpringMacroHelpers" value="true"/>
	</bean>
 

freemarkerConfig 配置:参数配置与jeecms-servlet-admin.xml类似。

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="freemarkerVariables">
			<map>
				<entry key="uuid" value-ref="uuid"/>
				<entry key="process_time" value-ref="process_time"/>
				<entry key="text_cut" value-ref="text_cut"/>
				<entry key="html_cut" value-ref="html_cut"/>
				<entry key="cms_pagination" value-ref="cms_pagination"/>
				<entry key="cms_channel_list" value-ref="cms_channel_list"/>
				<entry key="cms_channel_page" value-ref="cms_channel_page"/>
				<entry key="cms_channel" value-ref="cms_channel"/>
				<entry key="cms_content" value-ref="cms_content"/>
				<entry key="cms_content_list" value-ref="cms_content_list"/>
				<entry key="cms_content_page" value-ref="cms_content_page"/>
				<entry key="cms_tag_list" value-ref="cms_tag_list"/>
				<entry key="cms_tag_page" value-ref="cms_tag_page"/>
				<entry key="cms_topic_list" value-ref="cms_topic_list"/>
				<entry key="cms_topic_page" value-ref="cms_topic_page"/>
				<entry key="cms_comment_list" value-ref="cms_comment_list"/>
				<entry key="cms_comment_page" value-ref="cms_comment_page"/>
				<entry key="cms_guestbook_ctg_list" value-ref="cms_guestbook_ctg_list"/>
				<entry key="cms_guestbook_list" value-ref="cms_guestbook_list"/>
				<entry key="cms_guestbook_page" value-ref="cms_guestbook_page"/>
				<entry key="cms_vote" value-ref="cms_vote"/>
				<entry key="cms_lucene_list" value-ref="cms_lucene_list"/>
				<entry key="cms_lucene_page" value-ref="cms_lucene_page"/>
				<entry key="cms_friendlink_ctg_list" value-ref="cms_friendlink_ctg_list"/>
				<entry key="cms_friendlink_list" value-ref="cms_friendlink_list"/>
				<entry key="cms_advertising" value-ref="cms_advertising"/>
			</map>
		</property>
		<!--
			<property name="preTemplateLoaders">
				<list>
					<ref bean="tplMng"/>
				</list>
			</property>
			-->
		<property name="templateLoaderPath" value=""/>
		<property name="freemarkerSettings">
			<props>
				<prop key="tag_syntax">auto_detect</prop>
				<prop key="template_update_delay">5</prop>
				<prop key="defaultEncoding">UTF-8</prop>
				<prop key="url_escaping_charset">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="boolean_format">true,false</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
				<prop key="date_format">yyyy-MM-dd</prop>
				<prop key="time_format">HH:mm:ss</prop>
				<prop key="number_format">0.######</prop>
				<prop key="whitespace_stripping">true</prop>
				<!--空值处理<prop key="classic_compatible">true</prop>-->
				<prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as s</prop>
			</props>
		</property>
	</bean>
 

至此,JeeCms中的FreeMarker的配置已经分析完毕。

分享到:
评论
1 楼 莫小鸣 2013-04-08  
不错啊!!

相关推荐

    jeecms源码下载

    1. **搭建环境**:首先需要安装Java开发环境,并配置Maven或Gradle构建工具,然后导入Jeecms源码到IDE(如IntelliJ IDEA或Eclipse)中。 2. **运行项目**:通过IDE的构建和运行功能,启动Jeecms项目,测试其基本功能...

    jeecms源码包

    通过对Jeecms源码的分析和学习,开发者不仅可以了解其工作原理,还能提升Java Web开发技能,尤其是对于MVC框架、数据库操作、权限管理等方面的理解。同时,Jeecms的源码也是一个很好的实践案例,帮助开发者更好地...

    jeecms系统源码

    Jeecms系统源码是基于SSH(Struts2、Spring、Hibernate)架构开发的一款内容管理系统。SSH是一个流行的企业级Java应用框架,它整合了这三个强大的开源框架,为开发者提供了便捷的开发工具和高效的开发模式。 Struts...

    jeecms 源码包

    Jeecms是一款基于Java技术开发的内容管理系统,专为...通过深入学习和实践Jeecms源码,不仅可以掌握Jeecms的使用,还能提升对Java Web开发的整体理解和技能,对于从事企业级网站开发的工程师来说,这是一个宝贵的资源。

    jeecms 终极版源码

    通过深入学习Jeecms源码,不仅可以提升Java编程技能,还能了解内容管理系统的设计思想,这对于想要从事Web开发或者想要自建网站的人来说,无疑是一笔宝贵的财富。在实际操作中,可以逐步分析每个部分的代码,结合...

    [CMS程序]JEECMS 2.4.2 系统源码.zip

    对于学习JEECMS 2.4.2的学生,通过阅读和分析源码,可以深入了解Java Web开发的各种技术,提升实际项目经验,为未来的职业生涯打下坚实基础。同时,这个系统也是了解电子商务网站如何运作,如何处理订单、支付、库存...

    JEECMS2.0版本源码阅读

    在本文中,我们将对 JEECMS 2.0 版本的源码进行阅读和分析,了解其核心组件、技术框架和实现机制。 一、JEECMS 概述 JEECMS 是一个基于 Java 的内容管理系统,提供了强大的内容管理功能、灵活的模板系统和扩展性强...

    jeecms3.2.2版本源码包

    这个"jeecms3.2.2版本源码包"包含了Jeecms系统的核心源代码,允许开发者深入理解其工作原理并进行自定义修改。以下是关于Jeecms 3.2.2版本源码的一些关键知识点: 1. **Java技术栈**:Jeecms是用Java语言编写的,...

    JEECMS V8.0 源码

    6. **源码分析** - `jeecmsv8.1-src` 文件夹包含了JEECMS V8.0的全部源代码,开发者可以通过深入研究源码了解系统的架构和实现细节,为自定义开发提供基础。 - 学习源码有助于提升对Java Web开发的理解,特别是对...

    jeecms最新源码

    通过分析这些表的结构,开发者可以了解到Jeecms的数据模型,从而更好地理解其功能实现。 `jeecms`文件夹则包含了Jeecms的源代码。源代码通常分为几个部分:前端资源(HTML、CSS、JavaScript),后端服务(Java类、...

    jeecms二次开发必备

    Jeecms的源码结构清晰,便于理解和二次开发。主要包含以下几个模块: - 文章模块:处理文章的发布、管理及展示,是内容管理的基础。 - 辅助模块:提供如用户管理、权限控制等辅助功能。 - 通用操作模块:包含如上传...

    [CMS程序]JEECMS 2.4.2 系统程序.zip

    学生可以通过分析源码了解如何实现用户认证和授权。 2. 内容发布:CMS的核心功能之一,支持文本、图片、视频等多种媒体内容的发布、编辑和管理。源码中可能涉及了数据库设计、MVC(模型-视图-控制器)架构以及数据...

    jeecms源码解读

    【Jeecms源码解读】 Jeecms是一款基于Java技术的企业级内容管理系统,它提供了丰富的功能,包括内容管理、用户管理、权限控制等,适用于构建各类企业网站、新闻门户等。源码解读对于理解Jeecms的工作原理和进行二次...

    jeecms5.1-src.zip 源码包

    三、源码学习要点 1. Spring框架:理解Jeecms如何利用Spring管理Bean,以及AOP(面向切面编程)的实现,有助于掌握企业级应用的开发模式。 2. Hibernate:学习Jeecms如何通过Hibernate与数据库交互,了解ORM(对象...

    JEECMS v3.0.2 源码包jeecms_v3.0.2_final_src.zip

    **三、源码结构分析** 1. **下载说明.html**: 这个文件通常包含关于如何下载、安装和配置JEECMS的详细步骤,对于初学者来说是非常重要的指南。 2. **源码网说明.txt**: 此文本文件可能包含关于源码的使用、修改、...

    jeecms 爬虫 1.3 正式版 (附带整合 jeecms2012工程源码)

    【Jeecms 爬虫 1.3 正式版】是一款专为Jeecms内容管理系统设计的爬虫工具,结合了Jeecms 2012版本的工程源码,提供了对Jeecms网站内容抓取和分析的功能。这款工具对于开发者来说,能够帮助他们快速地获取和解析...

    [CMS程序]JEECMS网站管理系统 v1.1 Beta 源代码_jeecms-1.1.0-beta-src.zip

    通过学习和分析JEECMS的源代码,学生可以了解到如何实现这些功能,为将来从事电子商务平台开发积累经验。 对于计算机专业的毕业设计,JEECMS v1.1 Beta是一个理想的项目起点。学生可以根据项目需求对系统进行改造,...

    jeecms笔记(阅读源码)

    Jeecms是一款基于Java技术的企业级内容管理系统,其源码解读可以帮助我们深入理解系统的架构、设计模式以及核心功能实现。本笔记将聚焦于Jeecms的安装过程,并探索其源码中的关键部分。 首先,Jeecms的安装过程在...

    jeecms freemarker快乐到家分析

    本篇文章将对Jeecms的Freemarker相关知识进行深入解读和分析。 首先,我们遇到的一个常见问题是,在安装Jeecms后,尝试浏览Database时出现错误:“An internal error occurred during: 'Fetching children of ...

    jeecms4的源码

    - **模板引擎**:分析Jeecms4如何使用模板技术生成动态网页。 - **权限控制**:探索用户管理和权限验证机制,了解如何实现不同用户的角色和权限。 - **缓存策略**:查找缓存相关的代码,理解Jeecms4如何提高性能和...

Global site tag (gtag.js) - Google Analytics