Jeecms源码分析(三)

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


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

1、配置FreeMarkerConfigurer

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

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

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

 

Xml代码   收藏代码
  1. <property name="freemarkerSettings">  
  2.   
  3.      <props>  
  4.   
  5.        <prop key="template_update_delay">3600prop>  
  6.   
  7.      props>  
  8.   
  9.    property>  
 

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

 

2、解析FreeMarker视图

Xml代码   收藏代码
  1. <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
  2.   
  3.     <property name="suffix"><value>.ftlvalue>property>  
  4.   
  5.   bean>  
 

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

Xml代码   收藏代码
  1. <property name="exposeRequestAttributes">  
  2.   
  3.       <value>truevalue>  
  4.   
  5.     property>  
  6.   
  7.     <property name="exposeSessionAttributes">  
  8.   
  9.       <value>truevalue>  
  10.   
  11.     property>  
  12.   
  13.    
 

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

 

Xml代码   收藏代码
  1. <property name="exposeSpringMacroHelpers">  
  2.   
  3.       <value>truevalue>  
  4.   
  5.     property>  
 

 

3、FreeMarker中绑定表单域

 

Html代码   收藏代码
  1. <@spring.bind "command.phone" />  
  2.   
  3.   phone: <input type="text"  
  4.   
  5.       name="${spring.status.expression}"  
  6.   
  7.       value="${spring.status.value}">  
  8.   
  9.   <font color="#FF0000">${spring.status.errorMessage}font><br>  
  10.   
  11.    
  12.   
  13.   <@spring.bind "command.email" />  
  14.   
  15.       email: <input type="text"  
  16.   
  17.       name="${spring.status.expression}"  
  18.   
  19.       value="${spring.status.value}">  
  20.   
  21.   <font color="#FF0000">${spring.status.errorMessage}font><br>  
  22.   
  23.    
 

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

Html代码   收藏代码
  1. <@spring.bindEscaped>的FreeMarker模板的顶部增加以下一行:  
  2.   
  3.    <#import "/spring.ftl" as spring />  
  4.   
  5.    
 

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

 

 

 

 

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

总体说明:

 

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

 

Xml代码   收藏代码
  1. <prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as sprop>  

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

 

Html代码   收藏代码
  1. <div class="body-box">  
  2. <@p.form id="jvForm" action="o_update.do" labelWidth="12">  
  3. <@p.td   
  4. 。。。。  
  5. div>  

 

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

 

Xml代码   收藏代码
  1. ....  
  2.   
  3.     <property name="exposeRequestAttributes" value="false"/>  
  4.     <property name="exposeSessionAttributes" value="false"/>  
  5. ....  

 

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

  • web.xml 中的配置文件
Xml代码   收藏代码
  1. ....  
  2.        <context-param>  
  3.         <param-name>contextConfigLocationparam-name>  
  4.         <param-value>  
  5.             /WEB-INF/config/application-context.xml  
  6.             /WEB-INF/config/cache-context.xml  
  7.             /WEB-INF/config/captcha-context.xml  
  8.             /WEB-INF/config/jeecore-context.xml  
  9.             /WEB-INF/config/jeecms-context.xml  
  10.         param-value>  
  11.     context-param>  
  12.   
  13. ....  
  • jeecms-context.xml

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

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

详见前面的描述。

Xml代码   收藏代码
  1. <bean id="staticPageSvc" class="com.jeecms.cms.staticpage.StaticPageSvcImpl">  
  2.         <property name="tplMessageSource" ref="tplMessageSource"/>  
  3.         <property name="freeMarkerConfigurer">  
  4.             <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  5.                 <property name="freemarkerVariables">  
  6.                     <map>  
  7.                         <entry key="uuid" value-ref="uuid"/>  
  8.                         <entry key="process_time" value-ref="process_time"/>  
  9.                         <entry key="text_cut" value-ref="text_cut"/>  
  10.                         <entry key="html_cut" value-ref="html_cut"/>  
  11.                         <entry key="cms_pagination" value-ref="cms_pagination"/>  
  12.                         <entry key="cms_channel_list" value-ref="cms_channel_list"/>  
  13.                         <entry key="cms_channel_page" value-ref="cms_channel_page"/>  
  14.                         <entry key="cms_channel" value-ref="cms_channel"/>  
  15.                         <entry key="cms_content" value-ref="cms_content"/>  
  16.                         <entry key="cms_content_list" value-ref="cms_content_list"/>  
  17.                         <entry key="cms_content_page" value-ref="cms_content_page"/>  
  18.                         <entry key="cms_tag_list" value-ref="cms_tag_list"/>  
  19.                         <entry key="cms_tag_page" value-ref="cms_tag_page"/>  
  20.                         <entry key="cms_topic_list" value-ref="cms_topic_list"/>  
  21.                         <entry key="cms_topic_page" value-ref="cms_topic_page"/>  
  22.                         <entry key="cms_comment_list" value-ref="cms_comment_list"/>  
  23.                         <entry key="cms_comment_page" value-ref="cms_comment_page"/>  
  24.                         <entry key="cms_guestbook_ctg_list" value-ref="cms_guestbook_ctg_list"/>  
  25.                         <entry key="cms_guestbook_list" value-ref="cms_guestbook_list"/>  
  26.                         <entry key="cms_guestbook_page" value-ref="cms_guestbook_page"/>  
  27.                         <entry key="cms_vote" value-ref="cms_vote"/>  
  28.                         <entry key="cms_friendlink_ctg_list" value-ref="cms_friendlink_ctg_list"/>  
  29.                         <entry key="cms_friendlink_list" value-ref="cms_friendlink_list"/>  
  30.                         <entry key="cms_lucene_list" value-ref="cms_lucene_list"/>  
  31.                         <entry key="cms_lucene_page" value-ref="cms_lucene_page"/>  
  32.                         <entry key="cms_advertising" value-ref="cms_advertising"/>  
  33.                     map>  
  34.                 property>  
  35.                 <property name="templateLoaderPath" value=""/>  
  36.                 <property name="freemarkerSettings">  
  37.                     <props>  
  38.                         <prop key="tag_syntax">auto_detectprop>  
  39.                         <prop key="template_update_delay">5prop>  
  40.                         <prop key="defaultEncoding">UTF-8prop>  
  41.                         <prop key="url_escaping_charset">UTF-8prop>  
  42.                         <prop key="locale">zh_CNprop>  
  43.                         <prop key="boolean_format">true,falseprop>  
  44.                         <prop key="datetime_format">yyyy-MM-dd HH:mm:ssprop>  
  45.                         <prop key="date_format">yyyy-MM-ddprop>  
  46.                         <prop key="time_format">HH:mm:ssprop>  
  47.                         <prop key="number_format">0.######prop>  
  48.                         <prop key="whitespace_stripping">trueprop>  
  49.                         <prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as sprop>  
  50.                     props>  
  51.                 property>  
  52.             bean>  
  53.         property>  
  54.     bean>  
 
  • jeecms-servlet-admin.xml

   view resolver 配置:

Xml代码   收藏代码
  1. <bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.RichFreeMarkerViewResolver">  
  2.         <property name="prefix" value="/jeecms_sys/"/>  
  3.         <property name="suffix" value=".html"/>  
  4.         <property name="contentType" value="text/html; charset=UTF-8"/>  
  5.         <property name="exposeRequestAttributes" value="false"/>  
  6.         <property name="exposeSessionAttributes" value="false"/>  
  7.         <property name="exposeSpringMacroHelpers" value="true"/>  
  8.     bean>  
 

freemarkerConfig 配置:

Xml代码   收藏代码
  1. <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  2.     <property name="templateLoaderPath" value="/WEB-INF"/>  
  3.     <property name="freemarkerVariables">  
  4.         <map>  
  5.               
  6.             <entry key="appBase" value="/jeeadmin/jeecms"/>  
  7.               
  8.             <entry key="cms_perm" value-ref="cms_perm"/>  
  9.             <entry key="text_cut" value-ref="text_cut"/>  
  10.             <entry key="html_cut" value-ref="html_cut"/>  
  11.         map>  
  12.     property>  
  13.     <property name="freemarkerSettings">  
  14.         <props>  
  15.             <prop key="template_update_delay">0prop>  
  16.             <prop key="defaultEncoding">UTF-8prop>  
  17.             <prop key="url_escaping_charset">UTF-8prop>  
  18.             <prop key="locale">zh_CNprop>  
  19.             <prop key="boolean_format">true,falseprop>  
  20.             <prop key="datetime_format">yyyy-MM-dd HH:mm:ssprop>  
  21.             <prop key="date_format">yyyy-MM-ddprop>  
  22.             <prop key="time_format">HH:mm:ssprop>  
  23.             <prop key="number_format">0.######prop>  
  24.             <prop key="whitespace_stripping">trueprop>  
  25.             <prop key="auto_import">/ftl/pony/index.ftl as p,/ftl/spring.ftl as sprop>  
  26.         props>  
  27.     property>  
  28. bean>  
 
  • jeecms-servlet-front.xml ,

view resolver 配置:

 

Xml代码   收藏代码
  1. <bean id="freemarkerViewResolver" class="com.jeecms.common.web.springmvc.SimpleFreeMarkerViewResolver">  
  2.     <property name="contentType" value="text/html; charset=UTF-8"/>  
  3.     <property name="exposeRequestAttributes" value="false"/>  
  4.     <property name="exposeSessionAttributes" value="false"/>  
  5.     <property name="exposeSpringMacroHelpers" value="true"/>  
  6. bean>  
 

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

Xml代码   收藏代码
  1. <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  2.         <property name="freemarkerVariables">  
  3.             <map>  
  4.                 <entry key="uuid" value-ref="uuid"/>  
  5.                 <entry key="process_time" value-ref="process_time"/>  
  6.                 <entry key="text_cut" value-ref="text_cut"/>  
  7.                 <entry key="html_cut" value-ref="html_cut"/>  
  8.                 <entry key="cms_pagination" value-ref="cms_pagination"/>  
  9.                 <entry key="cms_channel_list" value-ref="cms_channel_list"/>  
  10.                 <entry key="cms_channel_page" value-ref="cms_channel_page"/>  
  11.                 <entry key="cms_channel" value-ref="cms_channel"/>  
  12.                 <entry key="cms_content" value-ref="cms_content"/>  
  13.                 <entry key="cms_content_list" value-ref="cms_content_list"/>  
  14.                 <entry key="cms_content_page" value-ref="cms_content_page"/>  
  15.                 <entry key="cms_tag_list" value-ref="cms_tag_list"/>  
  16.                 <entry key="cms_tag_page" value-ref="cms_tag_page"/>  
  17.                 <entry key="cms_topic_list" value-ref="cms_topic_list"/>  
  18.                 <entry key="cms_topic_page" value-ref="cms_topic_page"/>  
  19.                 <entry key="cms_comment_list" value-ref="cms_comment_list"/>  
  20.                 <entry key="cms_comment_page" value-ref="cms_comment_page"/>  
  21.                 <entry key="cms_guestbook_ctg_list" value-ref="cms_guestbook_ctg_list"/>  
  22.                 <entry key="cms_guestbook_list" value-ref="cms_guestbook_list"/>  
  23.                 <entry key="cms_guestbook_page" value-ref="cms_guestbook_page"/>  
  24.                 <entry key="cms_vote" value-ref="cms_vote"/>  
  25.                 <entry key="cms_lucene_list" value-ref="cms_lucene_list"/>  
  26.                 <entry key="cms_lucene_page" value-ref="cms_lucene_page"/>  
  27.                 <entry key="cms_friendlink_ctg_list" value-ref="cms_friendlink_ctg_list"/>  
  28.                 <entry key="cms_friendlink_list" value-ref="cms_friendlink_list"/>  
  29.                 <entry key="cms_advertising" value-ref="cms_advertising"/>  
  30.             map>  
  31.         property>  
  32.           
  33.                 <prop key="auto_import">/WEB-INF/ftl/pony/index.ftl as p,/WEB-INF/ftl/spring.ftl as sprop>  
  34.             props>  
  35.         property>  
  36.     bean>  
 

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

你可能感兴趣的:(Jeecms源码分析(三))