`
ligf06
  • 浏览: 101806 次
  • 性别: 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源码解读

    jeecms 所有源码分析解读,链接cms开发流程,链接cms系统整合架构

    jeecms源码下载

    jeecms源码下载

    jeecms源码包

    jeecms源码包

    jeecms源码

    jeecms源码,spring+springmvc框架,jeecms资源,超好用。

    JEECMS2源码的解读

    JEECMS2源码的解读,介绍JEECMS2源码的结构,开发流程等

    jeecms 源码包

    jeecms 源码包

    jeecms v8.1 源码

    JEECMSv8.1是一款支持微信小程序、栏目模型、内容模型交叉自定义、以及具备支付和财务结算的内容电商为一体内容管理系统:通过后台的简单设置即可自定义出集新闻管理、图库管理、视频...doc/jeecms模板置标使用手册.doc

    jeecms X1.0.1 正式版 源码包

    JEECMS是一款可以根据行政级别建立大型门户网站群的CMS,通过对站群权限的控制,可以建立中央部委、省、市、县、街道(镇)或总公司、分公司等... jeecms X1.0.1 更新日志:1、源码包和安装包瘦身2、修复了一些已知BUG

    JeeCMS 2012 源码包

    摘要:JSP源码,CMS系统,JeeCMS  jeecms v2012版是一款集新闻管理、图库管理、视频管理、下载系统、作品管理、产品发布及留言板于一体的综合性CMS系统。  jeecms v2012版新增功能如下:  1、新增统计功能  1.1...

    jeecms 终极版源码

    次为jeecms 源码!适合初学者研究!没有java基础的人也可以应用,只要求有点美工基础即可!

    JEECMS内容管理系统1.1源码

    JEECMS内容管理系统1.1源码。。。。。。。。。。。。

    jeecms3.2.2版本源码包

    jeecms开发源码包,jeecms网站上提供 自己修改之后的源码,有兴趣的可以共同讨论下

    jeecms最新源码

    www.lnjie.com整理。jeecms最新源码带数据库,可直接导入myeclipse运行

    JeeCMS 3.0.4 源码

    JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 源码JeeCMS 3.0.4 ...

    jeecms5.1-src.zip 源码包

    jeecms 源码包快来下载吧

    jeecms源码级安装使用文档

    jeecms3.0.4版本,自己总结的使用文档。

    jeecms-3.1.1 源码版

    JEECMS是JavaEE版网站管理系统 (Java Enterprise Edition Content Manage System)的简称。 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 · 采用SpringMVC3+Spring3+Hibernate3+...

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

    前几年的JavaJsp应用源码Demo,主要面向的是学生毕业设计学习。

    jeecms 网站开发源码

    JEECMS是JavaEE版网站管理系统(Java Enterprise Edition Content Manage System)的简称。 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 · 采用hibernate3+spring mvc+spring2+...

    jeecms freemarker快乐到家分析

    jeecms freemarker源码解读以及分析

Global site tag (gtag.js) - Google Analytics