jeecms 2012 源码分析(三)------ Spring + FreeMarker的集成。

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


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

1、配置FreeMarkerConfigurer

Xml代码   收藏代码
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">         ……    </bean>

 

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

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

 

Xml代码   收藏代码
 <property name="freemarkerSettings">

      <props>

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

      </props>

    </property>


 

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

 

2、解析FreeMarker视图

Xml代码   收藏代码
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

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

  </bean>


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

 
<property name="exposeRequestAttributes">

      <value>true</value>

    </property>

    <property name="exposeSessionAttributes">

      <value>true</value>

    </property>

 

 

使用这些宏,必须设置FreeMarkerViewResolverexposeMacroHelpers属性为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的配置已经分析完毕。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
jeecms v9.3 正式版 码包 更新日志 1、栏目添加选择模型模板只选择一个报错 2、内容复用待审核查询报错(开版) 3、根栏目添加内容报错 4、后台页面样式调整 5、后台编辑器分页问题 7、数据统计今日数据没有问题 8、公众号推送菜单和群发微信菜单获取微信端消息返回处理 9、OSS管理添加appkey_secretId后台未解密导致数据存储错误 10、会员中心留言列表报错 11、工作流节点空值处理 12、手机模板在静态页生成的情况下url错误处理 13、新增百度主动推送 14、内容删除同时删除静态页(含FTP) 15、栏目和内容静态化调整成只生成前10页 16、activation jcaptcha freemarker JAR部分用户反映下载不了,调整pom采用本地jar 17、栏目没有选择模型模板的情况下,发布内容选择不到模型问题处理 JEECMS简介 JEECMS是JavaEE版网站管理系统(Java Enterprise Edition Content Manage System)的简称。 · 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 · 采用hibernate3 spring mvc spring2 freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 · 完全生成全站静态页面,可自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录 jeecms页面展示:   相关阅读 同类推荐:CMS系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值