一、从freemarker谈起 Freemarker使用模板技术进行视图的渲染。自从看了Struts标签、Freemarker、JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… Spring本身支持了对Freemarker的集成。只需要配置一个针对Freemarker的视图解析器即可。 二、Spring MVC视图解析器 视图解析器的工作流程大致是这样的: Controller的某个方法执行完成以后,返回一个视图(比如:listUser) 视图解析器要做的工作就是找到某个对象来完成视图的渲染,或者跳转到其他的逻辑视图。这里的渲染对象通常就是我们的jsp文件或者我们下面用的Freemarker(例如listUser.jsp或者listUser.ftl)。 渲染完成以后,将解析结果发送到客户端浏览器 下面介绍一下本文需要用到的解析器(更多解析器资料): InternalResourceViewResolver:这是一个最常用的解析器。通常使用它指定渲染对象为jsp页面 FreeMarkerViewResolver:这就是Spring与Freemarker整合需要用到的解析器 三、配置多视图,支持freemarker 我们通常不希望所有的动态页面请求都使用Freemarker来渲染,那就需要配置多个视图解析器。网上有很多这方面的帖子。我看到很多人的做法是在web.xml中配置两个DispatcherServlet,一个拦截.do,一个拦截.ftl;然后再写两个dispatcherServlet.xml,配置两个视图解析器;jsp页面、ftl模板就各司其职。
freemarker中显示某对象使用${name}。但如果name为null,freemarker就会报错。如果需要判断对象是否为空: <#if name??> …… </#if> 当然也可以通过设置默认值${name!""}来避免对象为空的错误。如果name为空,就以默认值(!后的字符)显示。 对象user,name为user的属性,这时user,name都有可能为空,可以写成${(user.name)!""},表示user或者name为null,都显示为空。判断为空 <#if (user.name)??>
网站开发中,分页是必不可少的。 下面使用freemarker实现了一个数据分页控件。如果当前页超过 指定显示的页数链接数 的一半,则当前页居中显示。 例如:当前第10页,显示10个页数链接数,那么显示第6~第15页分页链接,且第10页居中。代码如下: 分页组件 <#-- 分页标签:用于显示数据分页链接。 pagination:分页对象。 url:链接地址 showPageLinkCount:显示的页数链接数 isShowMoreLI:是否显示“<li>...</li>”提示更多还有更多页数 isNeedPageTo:是否显示转到指定页数的表单 --> <#macro pager pagination url="#" showPageLinkCount=10 isShowMoreLI=true isNeedPageTo=true>
QQ在线交流是网站开发中经常用的的功能。 下面写了一个Freemarker的QQ在线交流的代码组件。 <#-- QQ在线交流 qq:需要发起会话的QQ号码。 style:在线交流图标样式1~13可选 。参考http://www.cnblogs.com/shengxiang/archive/2011/09/07/2169892.html target:本页或者新窗口打开连接 menu:是否显示按钮 site:提示信息 alt:提示信息 --> <#macro qqSite qq style="4" target="_self" menu="yes" site="点击联系" alt="点击联系"> <a target="${target}
下了一个eclipse的freemarker插件,结果居然不支持“!,??” 在ftl文件中写下代码 ${message!""} 居然编译通不过!坑爹呀!! 于是,又换成如下代码: <#if message??> ${message} </#if> 毅然报错!说什么不支持“?,!” 无奈,只能将插件删掉。 偶然间发现JBoss Tool插件中带有一个Freemarker插件,于是下载JBoss Tool插件,只安装了Freemarker插件。再看代码,终于对了。 顺便说一句,开发工具后起之秀IntelliJ IDEA可是原生支持Freemarker的哟,Java开发代码提示直接把Eclipse甩出几条街!前端开发更是棒棒的!推荐!!!