基于DisplayTag的分页及属性定制
### 基于DisplayTag的分页及属性定制 #### DisplayTag概述 DisplayTag是一个用于JSP页面的强大标签库,其主要功能在于处理表格数据,包括分页、数据导出、列排序等高级特性。DisplayTag是开源软件,可以从官方网站(http://displaytag.sourceforge.net/)获取最新版本的JAR包并集成到项目中使用。值得注意的是,DisplayTag依赖于Apache项目的一些组件,因此还需要下载并添加相应的Apache JAR包支持。 #### 配置类库标签 为了能在项目中使用DisplayTag,需要在`web.xml`中配置对应的TLD文件,这些文件定义了标签库的行为和语法。DisplayTag使用了两个主要的TLD文件:`displaytag-1.1.tld` 和 `fmt.tld`。其中,`displaytag-1.1.tld` 是DisplayTag的核心标签库文件;`fmt.tld` 则用于支持国际化,特别是对于中文等非英语环境的支持至关重要。配置示例如下: ```xml <taglib> <taglib-uri>http://displaytag.sourceforge.net/</taglib-uri> <taglib-location>/WEB-INF/displaytag-1.1.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib> ``` #### 构造页面显示的List DisplayTag能够从请求(request)或会话(session)中获取List类型的对象,并以此为基础构建表格数据。根据实际需求,List可以通过不同的方式填充数据。 ##### 单表查询结果集 当查询单一表的数据时,可以使用如下的Hibernate代码来获取结果集,并将List设置到请求对象中供前端页面使用: ```java List userList = getHibernateTemplate().find("from User"); request.setAttribute("userList", userList); ``` ##### 多表查询结果集 对于复杂的多表查询,可以使用如下方式构建查询语句,并将结果存储在一个自定义的类(如`MyObject`)中,然后将该List设置到请求对象中: ```java List userCustomerList = getHibernateTemplate().find( "select new MyObject(user.name, user.no, ...) from User u, Customer c"); request.setAttribute("userCustomerList", userCustomerList); ``` 需要注意的是,在这种情况下,需要先定义好`MyObject`类及其构造函数。 ##### 查询优化 上述两种方法每次翻页时都会重新查询所有数据,这对于大数据量来说效率较低。为了优化性能,可以手动构造SQL语句实现按需查询,如使用`LIMIT`关键字限制返回行数。此外,DisplayTag还提供了几个自动生成的参数供后端开发人员使用: - `page`: 当前页码。 - `dir`: 排序方向。 - `sort`: 排序列名。 #### DisplayTag页面基本组成 ##### 引入标签 在JSP页面中使用DisplayTag之前,首先需要引入标签库: ```jsp <%@ taglib uri="http://displaytag.sourceforge.net/" prefix="display" %> <%@ taglib uri="/WEB-INF/fmt" prefix="fmt" %> ``` ##### 使用displayTag标签 DisplayTag的使用非常灵活,下面是一些常见的应用场景: ###### 最简单的情况 ```jsp <display:table name="userList"> <display:column property="name"/> <display:column property="age"/> </display:table> ``` ###### 使用 `<display:column/>` 标签的情况 ```jsp <display:table name="userList"> <display:column title="姓名" property="name"/> <display:column title="年龄" property="age"/> </display:table> ``` ###### 表格显示样式的定义 可以通过CSS自定义表格的样式,比如: ```jsp <style> .mytable { border-collapse: collapse; } .mytable td, .mytable th { border: 1px solid #ddd; padding: 8px; } </style> <display:table name="userList" class="mytable"> ... </display:table> ``` ###### 标签取得数据的数据源 DisplayTag标签可以通过`name`属性指定数据来源,即从request或session中获取的List名称。 ###### 通过增加id属性创建隐含的对象 为了方便使用,可以在`<display:table>`标签中加入`id`属性,从而创建一个隐含的对象,后续可以直接使用该对象的属性和方法。 ```jsp <display:table name="userList" id="user"> <display:column title="姓名" property="name"/> <display:column title="年龄" property="age"/> </display:table> ``` 在上述例子中,每一行数据都可以通过`user`访问。 ###### 显示部分数据 可以通过`partialList`属性控制只显示部分数据。 ```jsp <display:table name="userList" partialList="true" size="10"> ... </display:table> ``` 在上面的例子中,只显示前10条数据。 ###### 对email和url地址的直接连接 对于email和URL地址,可以通过特定的方式使其成为可点击的链接。 ```jsp <display:table name="userList"> <display:column property="email" media="html"/> <display:column property="website" media="html"/> </display:table> ``` 其中`media="html"`使email和网址以HTML格式显示,成为可点击的链接。 ###### 使用装饰模式转换数据显示 装饰模式允许对数据进行自定义转换。可以通过编写自己的装饰器类来实现。 ```java public class AgeDecorator implements Decorator { public String decorate(Object obj, Object columnValue, DecoratorParameters parameters) { int age = (Integer) columnValue; return "Age: " + age; } } ``` 在JSP页面中应用装饰器: ```jsp <display:table name="userList"> <display:column title="Age" property="age" decorator="com.example.AgeDecorator"/> </display:table> ``` ###### 创建动态连接 为了创建动态连接,可以使用`url`属性来指定动态生成的链接。 ```jsp <display:table name="userList"> <display:column title="详情" url="/details?user_id={id}"/> </display:table> ``` 在上述例子中,`{id}`表示当前行的ID字段。 ##### 分页 DisplayTag提供了强大的分页功能,可以通过简单的配置实现自动分页。 ```jsp <display:table name="userList" pagesize="10"> ... </display:table> ``` 在此示例中,每页显示10条记录。 ##### 排序 同样,DisplayTag也支持对表格中的数据进行排序,只需简单地配置即可。 ```jsp <display:table name="userList" defaultsort="1" sort="true"> <display:column title="姓名" property="name" sort="true"/> <display:column title="年龄" property="age" sort="true"/> </display:table> ``` 在上述示例中,`defaultsort="1"`表示默认按照第一列排序,`sort="true"`表示允许用户手动排序。 ##### column分组 通过`group-by`属性可以实现列分组。 ```jsp <display:table name="userList" group-by="department"> ... </display:table> ``` 在此示例中,按`department`字段分组。 ##### 导出数据到其他格式 DisplayTag支持将表格数据导出到CSV、XML等格式。 ```jsp <display:table name="userList" export="true" exportxls="true" exportxml="true" exportcsv="true"> ... </display:table> ``` 上述示例中,`export="true"`表示启用导出功能。 ##### 配置属性,覆盖默认 可以通过属性覆盖默认设置,例如改变分页样式等。 ```jsp <display:table name="userList" pager-style="advanced" page-size="20"> ... </display:table> ``` 此处`pager-style="advanced"`设置了更高级的分页样式。 ##### 增加表头表尾 可以在表格中添加自定义的表头和表尾。 ```jsp <display:table name="userList"> <display:table-header/> <display:column title="姓名" property="name"/> <display:column title="年龄" property="age"/> <display:table-footer/> </display:table> ``` ##### 表格里面还有表格 在某些情况下,可能需要在表格内部嵌套另一个表格。 ```jsp <display:table name="userList"> <display:column title="部门" property="department"> <display:table name="department.users"> <display:column title="姓名" property="name"/> <display:column title="职位" property="position"/> </display:table> </display:column> </display:table> ``` 在此示例中,每个部门下面都有一张包含员工信息的小表格。 ##### 修改分页样式关键值 可以通过配置文件或直接在JSP页面中修改分页样式的关键值。 ```jsp <display:table name="userList" pager-style="advanced" next-key="下一页" previous-key="上一页"> ... </display:table> ``` 在此示例中,`next-key`和`previous-key`分别设置了“下一页”和“上一页”的文本。 ##### 其他 除了上述提到的功能外,DisplayTag还提供了许多其他的特性,例如国际化支持、自定义错误消息等,这些都可以通过配置文件或API来实现。 #### displaytag.properties属性定制 DisplayTag还支持通过`displaytag.properties`文件来自定义各种属性,例如语言设置、提示信息等。这个文件通常位于项目的类路径下,可以根据需要修改其内容来调整DisplayTag的行为。 通过以上的介绍可以看出,DisplayTag是一个功能强大且高度可定制化的标签库,非常适合处理复杂的表格数据展示任务。
剩余20页未读,继续阅读
- 龙少有约2013-10-07不错的资源,对displayTag有了更深的学习@
- 粉丝: 5
- 资源: 154
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于AT89C51单片机的三电梯联动控制系统全部资料+详细文档+源码.zip
- 基于51单片机的小车简单的蓝牙通信应用、通过手机与蓝牙模块的通信全部资料+详细文档+源码.zip
- 基于51单片机的循迹小车全部资料+详细文档+源码.zip
- 基于51单片机的一个智能密码锁设计全部资料+详细文档+源码.zip
- 基于51单片机课程设计,带存储功能的频率计全部资料+详细文档+源码.zip
- 基于51单片机的音乐播放器设计全部资料+详细文档+源码.zip
- 基于51单片机简易电子琴音乐盒全部资料+详细文档+源码.zip
- 基于C51单片机的比赛计分器全部资料+详细文档+源码.zip
- 基于AT89C52单片机搭建的PID直流电机控制程序,本程序为C语言编写,主要用于Proteus电路仿真全部资料+详细文档+源码.zip
- 基于51单片机的直流稳压电源设计全部资料+详细文档+源码.zip
- 基于Camera+GlSurfaceView实现相机实时预览 ,实时美颜,实时预览滤镜功能全部资料+详细文档+源码.zip
- 基于LCD1602和51单片机的个人项目-计算器全部资料+详细文档+源码.zip
- 基于HC蓝牙模块和51单片机的电子琴全部资料+详细文档+源码.zip
- 基于51单片机的智能车控制板全部资料+详细文档+源码.zip
- 基于Github仓库和Cloudflare Workers简单快捷的纯白嫖随机图片接口实现全部资料+详细文档+源码.zip
- 基于ModBus协议的51单片机节点全部资料+详细文档+源码.zip