FreeMarker编写一个用于实现分页效果的通用指令
2012-06-13 10:36
627 查看
Let`s drink code
这是我们自定义的工具类FreeMarkerUtil.java
这是位于//src//ftl//包中用于演示分页效果的paginUsage.ftl
这是位于//src//ftl//inc//包中用于生成分页的通用指令的pagin.ftl
最后是JUnit4.x编写的单元测试类FreeMarkerTest.java
这是我们自定义的工具类FreeMarkerUtil.java
package com.jadyer.util; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class FreeMarkerUtil { /** * 获取指定目录下的模板文件 * @param name 模板文件的名称 * @param pathPrefix 模板文件的目录 */ public Template getTemplate(String name, String pathPrefix) throws IOException{ Configuration cfg = new Configuration(); //通过FreeMarker的Configuration对象可以读取ftl文件 cfg.setClassForTemplateLoading(this.getClass(), pathPrefix); //设置模板文件的目录 cfg.setDefaultEncoding("UTF-8"); //Set the default charset of the template files Template temp = cfg.getTemplate(name); //在模板文件目录中寻找名为"name"的模板文件 return temp; //此时FreeMarker就会到类路径下的"pathPrefix"文件夹中寻找名为"name"的模板文件 } /** * 根据模板文件输出内容到控制台 * @param name 模板文件的名称 * @param pathPrefix 模板文件的目录 * @param rootMap 模板的数据模型 */ public void print(String name, String pathPrefix, Map<String,Object> rootMap) throws TemplateException, IOException{ this.getTemplate(name, pathPrefix).process(rootMap, new PrintWriter(System.out)); } /** * 根据模板文件输出内容到指定的文件中 * @param name 模板文件的名称 * @param pathPrefix 模板文件的目录 * @param rootMap 模板的数据模型 * @param file 内容的输出文件 */ public void printFile(String name, String pathPrefix, Map<String,Object> rootMap, File file) throws TemplateException, IOException{ Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); this.getTemplate(name, pathPrefix).process(rootMap, out); //将模板文件内容以UTF-8编码输出到相应的流中 if(null != out){ out.close(); } } }
这是位于//src//ftl//包中用于演示分页效果的paginUsage.ftl
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <#import "/inc/pagin.ftl" as my/> 分页效果:<@my.genPagin url="#" totalPages=100 currPage=14/>
这是位于//src//ftl//inc//包中用于生成分页的通用指令的pagin.ftl
<#-- 自定义指令genPagin的参数说明,如下 url 必填。用于指定链接所跳转的URL totalPages 必填。用于指定总页数 currPage 选填。用于指定当前显示第几页,默认显示第一页 showPageNum 选填。用于指定所显示页链接的数量,默认显示10个页链接。否则总不能把所有页的链接都显示出来吧 class 选填。用于指定<a/>的class属性 --> <#macro genPagin url totalPages currPage=1 showPageNum=10 class=""> <#local halfPage = (showPageNum/2)?int/> <#if (halfPage>=currPage)> <@showPage start=1 end=currPage currPage=currPage url=url class=class/> <@showPage start=currPage+1 end=showPageNum currPage=currPage url=url class=class/> <#else> <@showPage start=currPage-halfPage+1 end=currPage currPage=currPage url=url class=class/> <#if (currPage+halfPage>totalPages)> <#local endPage=totalPages/> <#else> <#local endPage=currPage+halfPage/> </#if> <@showPage start=currPage+1 end=endPage currPage=currPage url=url class=class/> </#if> </#macro> <#macro showPage start end currPage url class> <#list start..end as page> <#-- 当前页则不显示链接 --> <#if currPage==page> [${page}] <#else> <a href="${url}" class="${class}">${page}</a> </#if> </#list> </#macro>
最后是JUnit4.x编写的单元测试类FreeMarkerTest.java
package com.jadyer.test; import java.io.File; import java.io.IOException; import java.util.HashMap; import org.junit.Test; import com.jadyer.util.FreeMarkerUtil; import freemarker.template.TemplateException; public class FreeMarkerTest { @Test public void print() throws TemplateException, IOException{ new FreeMarkerUtil().print("paginUsage.ftl", "/ftl", new HashMap<String,Object>()); new FreeMarkerUtil().printFile("paginUsage.ftl", "/ftl", new HashMap<String,Object>(), new File("D:\\ftl\\my.html")); } }
相关文章推荐
- FreeMarker编写一个用于实现<select/>效果的通用指令
- 跟着汤阳光同志做一个OA系统(十二):通用的分页实现、HQL生成器QueryHelper
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- Rhino 是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
- WinForm下编写分页控件,实现DataGridView的分页效果
- 一个最为简单的jquery 分页实现方法!可以用用于理解js分页的原理。
- 编写一个项目,实现页面之间切换时的动画效果。上传代码并描述步骤
- 一个通用的分页存储过程实现-SqlServer(附上sql源码,一键执行即刻搭建运行环境)
- 使用jquery编写一个分页组件(部分内容并不通用,以后需改善)
- 创建ORCLE存储过程含有一个输出游标参数和输出整型参数(实现对表的分页效果)
- ReactNative基础(四)了解ListView的使用、实现GridView效果、编写一个真实网络请求案例
- 点击侧滑任何一个 菜单项,请求网络数据展示在主界面的xlistview中且实现下拉刷新效果和上拉加载的分页加载数据效果
- 设计并实现用于ASP.NET一个通用的数据存取层应用程序 原作者 Paul Abarham 翻译 cwxiao888@163.com
- ReactNative基础(四)了解ListView的使用、实现GridView效果、编写一个真实网络请求案例
- <TextView>实现一个有趣的小效果
- 使用HTML5和jQuery插件Quicksand实现一个超酷的星际争霸2兵种分类展示效果
- 【Java】实现一个根据日期判断星座程序的编写
- 使用jQuery编写的一个图片局部放大效果
- 实现一个通用的计数器组件
- secureCRT中实现一个脚本VBScript, 用来让连接到主机的测试板子一直run一条指令。