spring mvc中使用freemark的一点心得
2014-08-11 12:28
387 查看
参考文档: FreeMarker标签与使用 连接http://blog.csdn.net/nengyu/article/details/6829244
freemarker学习笔记--指令参考: http://www.cnblogs.com/pengfeisun/articles/1623182.html
编译过后,模板的速度也要比jsp快.
具体的freemark页面上的使用:见http://blog.csdn.net/nengyu/article/details/6829244
最近做的项目中要在spring mvc中实现freemark 加载html模板,关键实现如下:
引入freemark.jar包
web.xml中的配置
配置文件类: com.test.common.freemarker.CustomFreeMarkerConfigurer
自定义html模板类:HtmlTemplateLoader,加escape html指令, escape指令在解析模版时起作用,而不是运行时起作用
escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。
<#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}
</#escape>
等同于:
[align=left]First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}[/align]
[align=left]具体的freemark指令见: freemarker学习笔记--指令参考: http://www.cnblogs.com/pengfeisun/articles/1623182.html[/align]
freemarker学习笔记--指令参考: http://www.cnblogs.com/pengfeisun/articles/1623182.html
Freemarker 高级进阶
jsp的第一次运行,就要运行servlet,如果开发时频繁的修改jsp,会导致开发速度比较慢;(每改一次,要重新编译一次);编译过后,模板的速度也要比jsp快.
具体的freemark页面上的使用:见http://blog.csdn.net/nengyu/article/details/6829244
最近做的项目中要在spring mvc中实现freemark 加载html模板,关键实现如下:
引入freemark.jar包
web.xml中的配置
<!-- freemarker 配置 --> <bean id="freeMarkerConfigurer" class="com.test.common.freemarker.CustomFreeMarkerConfigurer"> <!--freemark的配置文件类--> <property name="templateLoaderPaths"> <list> <value>/WEB-INF/template/</value> <!--html文件的存放位置--> </list> </property> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">5</prop> <prop key="default_encoding">UTF-8</prop> <prop key="locale">zh_CN</prop> <prop key="url_escaping_charset">UTF-8</prop> <prop key="date_format">yyyy-MM-dd</prop> <prop key="time_format">HH:mm:ss</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="number_format">0.######</prop> <prop key="boolean_format">true,false</prop> <prop key="classic_compatible">true</prop> <prop key="whitespace_stripping">true</prop> </props> </property> </bean> <!-- freemark 页面解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> <property name="contentType" value="text/html; charset=utf-8" /> <property name="exposeSpringMacroHelpers" value="true"/> <property name="cache" value="true" /> <property name="suffix" value=".html" /> <property name="order" value="1" /> </bean>
配置文件类: com.test.common.freemarker.CustomFreeMarkerConfigurer
public class CustomFreeMarkerConfigurer extends FreeMarkerConfigurer { @Override protected TemplateLoader getAggregateTemplateLoader( List<TemplateLoader> templateLoaders) { <!-- HtmlTemplateLoader 这个类用来自定义html模板 --> return new HtmlTemplateLoader(super.getAggregateTemplateLoader(templateLoaders)); } }
自定义html模板类:HtmlTemplateLoader,加escape html指令, escape指令在解析模版时起作用,而不是运行时起作用
public class HtmlTemplateLoader implements TemplateLoader { private static final String HTML_ESCAPE_PREFIX= "<#escape x as x?html>"; private static final String HTML_ESCAPE_SUFFIX = "</#escape>"; private final TemplateLoader delegate; public HtmlTemplateLoader(TemplateLoader delegate) { this.delegate = delegate; } /* (non-Javadoc) * @see freemarker.cache.TemplateLoader#closeTemplateSource(java.lang.Object) */ @Override public void closeTemplateSource(Object templateSource) throws IOException { delegate.closeTemplateSource(templateSource); } /* (non-Javadoc) * @see freemarker.cache.TemplateLoader#findTemplateSource(java.lang.String) */ @Override public Object findTemplateSource(String name) throws IOException { return delegate.findTemplateSource(name); } /* (non-Javadoc) * @see freemarker.cache.TemplateLoader#getLastModified(java.lang.Object) */ @Override public long getLastModified(Object templateSource) { return delegate.getLastModified(templateSource); } /* (non-Javadoc) * @see freemarker.cache.TemplateLoader#getReader(java.lang.Object, java.lang.String) * 在读取template文件之后, 在前后套上<#escape>标签 */ @Override public Reader getReader(Object templateSource, String encoding) throws IOException { Reader reader = delegate.getReader(templateSource, encoding); String templateText = IOUtils.toString(reader); return new StringReader(HTML_ESCAPE_PREFIX+templateText + HTML_ESCAPE_SUFFIX); } }
escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。
<#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}
</#escape>
等同于:
[align=left]First name: ${firstName?html}
Last name: ${lastName?html}
Maiden name: ${maidenName?html}[/align]
[align=left]具体的freemark指令见: freemarker学习笔记--指令参考: http://www.cnblogs.com/pengfeisun/articles/1623182.html[/align]
相关文章推荐
- 一点使用oracle net的心得
- 使用Google Adsense的一点心得
- 使用oracle的一点心得(不错)
- JMS(Jboss Messaging)的一点使用心得(二)使用Spring
- JMS(Jboss Messaging)的一点使用心得(一)环境配置
- Process使用的一点心得
- JMS(Jboss Messaging)的一点使用心得(六)Messaging扩展应用-Message Bridge
- 使用Webbrowser的一点心得体会
- Asp.net 2.0使用Global.asax制作网站计数器的一点心得
- JMS(Jboss Messaging)的一点使用心得(四)Spring扩展应用-可修改的JMS ConnectionFactory
- Asp.net 2.0 使用SqlDataSource的一点心得
- Asp.net 2.0使用Global.asax制作网站计数器的一点心得
- 我使用Authentication的一点心得
- 使用oracle的一点心得
- 使用QTP9.0的一点心得——对象仓库
- 使用ASP调用WebService的一点心得
- 关于三层结构的一点使用心得与开发建议
- 关于三层结构的一点使用心得与开发建议
- 使用表格的一点心得
- JMS(Jboss Messaging)的一点使用心得(五)Spring扩展应用-可自动重连的JmsMessageListenerContainer