Displaytag 使用简介
一 简介
Display Tag Lib是一个标签库,用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等。
二 安装使用
1.在displaytag官网下载的文件:
displaytag-1.2.jar
displaytag-export-poi-1.2.jar
displaytag-portlet-1.2.jar adapt displaytag for use in JSR-168 portals
displaytag-examples-1.2.war
2.其他包
commons-logging
commons-lang
commons-collections
commons-beanutils
log4j
itext (optional, for pdf/rtf export)
3.引入displaytag标签库
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
三 示例
1.最简单的应用
<display:table name=”s”/>
//name 数据源 默认从request中取值
2.带column的应用
<display:table name="test">
<display:column property="id" title="ID" />
<display:column property="name" />
<display:column property="email" format="email is {0}" />
<display:column property="power" />
<display:column property="url" autolink="true"/>
</display:table>
//title 列名,property 属性名getXXX方法
// format 格式化
//autolink <a> 自动匹配http://www.sina.com s@126.com
3.表格显示样式
<%request.setAttribute("tableClass","its");%>
<display:table name="p" class="${tableClass}"/>
<display:column title="Age" property="age"
style="text-align:right;"/>
</display:table>
//默认情况display:table的样式是itis
//<display:table>适用所有<table>属性
//<display:column>适用所有<td>属性
4.分页
<display:table id="row" name="p"
size="${resultSize}" pagesize="5">
<display:column title="Id" property="id"/>
<display:column title="Name" property="name"/>
<display:column title="Age" property="age"/>
</display:table>
//size总记录数
//pagesize 每页记录数
5.排序
<display:table id="row" name="p" defaultsort="5" >
<display:column title="Id" property="id"/>
<display:column title="Name" property="name"/>
<display:column title="Age" property="age"
sortable=”true” headerClass=”sortable”/>
</display:table>
// sortable列是否可以排序
// headerClass 表头样式
// defaultsort 默认按照第几列进行排序
//注意:存在分页时排序仅仅针对的是当前页面,而不是整个List都进行排序
6.导出
<display:table id="row" name="p" export="true">
<display:column title="Id" property="id"/>
<display:column title="Name" property="name"/>
<display:column title="Age" property="age"/>
<display:setProperty name="export.pdf" value="true"/>
</display:table>
//export支持导出 默认有CSV、EXCEL、XML 3种格式
//display:setProperty 替换displaytag.properties 属性文件中的属性
//添加了iText包以后name="export.pdf" value="true"可以支持导出PDF和RTF
//在<display:table/>里设定export="true"
//在<display:column/>里设定media="csv excel xml pdf" 决定该字段在导出到其//他格式时被包不包含,不设定则都包含
//<display:setProperty name="export.csv" value="false" />
//决定该种格式能不能在页面中导出
7.数据源
有四种范围:
pageScope
requestScope (默认) <display:table name="p" >
sessionScope <display:table name="sessionScope.p" >
applicationScope
注意,默认情况下是从request中取值name="p",如果要从别的作用域中取值需要加作用域。
8.通过增加id属性创建隐含的对象
<display:table id="row" name="p" export="true">
<display:column title="Id" property="id"/>
<display:column title="Name" property="name"/>
<display:column title="Age" property="age"/>
<display:column title="RowNumber" >
<%=pageContext.getAttribute("row_rowNum")%>
|${row_rowNum}|<c:out value="${row.first_name}"/>
</display:column>
</display:table>
在<display:table/>里增加了id属性,这时就在page context里创建了一个隐含对象,指向List里的当前对象,可以通过(ListObject) pageContext. getAttribute("id")来捕获这个对象。同时还创建了一个id_rowNum对象,同样,可通过pageContext.getAttribute("testit_rowNum")来捕获,它仅仅代表当前行的行数。
9.分组
<display:table id="row" name="p" export="true">
<display:column title="Id" property="id"/>
<display:column property="name" group="1"/>
<display:column title="Age" property="age"/>
</display:table>导出数据到其他格式时,group无效
10.配置属性,修改默认值
两种方法:
A、在程序classpath下新建displaytag.properties文件
B、对于单个表格,应用<display:setProperty>标签
具体可配置的属性:http://displaytag.sourceforge.net/configuration.html
11.使用装饰模式转换数据显示(写自己的 decorator )
A、对整个表格应用decorator
<display:table name="p" class="${tableClass}"
decorator="com.yaxon.tag.decorators.DecoratorsMS"> <display:column title="Id" property="id"/>
<display:column title="Name" property="name"/>
<display:column title="Age" property="age"/>
<display:column title="Brithday" property="brithday"/>
<display:column title="Power" property="power"/>
<display:column title="Email" property="email"/>
<display:column title="Url" property="url"/>
</display:table>
com.yaxon.tag.decorators.DecoratorsMS 即自己写的decorator,它要继承TableDecorator类,看看它的一个方法:
public String getBrithday()
{
return this.dateFormat.format(((People) this.getCurrentRowObject()).getBrithday());
}
很明显,它通过父类的getCurrentRowObject()方法获得当前对象,然后对其getBrithday ()方法进行‘油漆’
B、对单独的column应用decorator
<display:table name="test">
<display:column property="id" title="ID" />
<display:column property="email" />
<display:column property="status" />
<display:column property="date" decorator="org.displaytag.sample.LongDate Wrapper " />
</display:table>
org.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口,它的方法:
public final String decorate(Object columnValue)
{
Date date = (Date) columnValue;
return this.dateFormat.format(date);
}
显然,它获得不了当前对象(因为它实现的是接口),仅仅是获得该对象的columnValue,然后‘油漆’
11.数据格式化输出
简单介绍几种需要格式化输出的情况:
1) 日期
<display:column property="brithday" format="{0,date, yyyy-MM-dd}"/>
输出:2009-06-06
<display:column property="brithday" format="{0,date, yyyy年MM月dd日}"/>
输出:2009年06月06日
2) 数值
<display:column property="power" format="{0,number, #,###.00}"/>
输出:500,000,000.05
3) 固定常量
<display:column property="money" format="{0}$"/>
输出:5000$
Format{}第一个参数为格式化的数据序号,第二个参数是数据类型,数字为number,第三个参数为数据格式。引用一句官方网站上的原话:You can use any valid java.text.MessageFormat
pattern in the format
attribute. Sorting will be based on the original object, not on the formatted String.
是说你可以使用任何java.text.MessageFormat
的有效格式来格式化此属性,排序是针对原数据而不是针对格式化后的数据。
12.创建动态连接
如图:
创建动态连接有两种方式
1) 自定义decorator 输出内容,这个方法开发代码比较多,这里就不介绍了。
2) 现在介绍一种比较简单实用的方法:
比如上图需要显示某个记录信息的详细情况,
1.创建处理显示详情的Action方法
public String someoneDetail() throws NamingException{
InitialContext ctx=new InitialContext();
SomethingSessionRemote
ssb=(SomethingSessionRemote)ctx.lookup("SomethingSessionBean/remote");
something = ssb.getSomeoneDetail(something);
return "detail";
}
2.配置Action处理方法的返回类型,或者直接操作request对象跳转。
<action name="shows" class="com.yaxon.test.action.SomethingAction">
<result name="detail">showDetail.jsp</result>
</action>
3.为数据显示页面创建动态连接
<display:table中新增加column列
<display:column title="操作">
<a href='shows!someoneDetail.action?something.id=${thin.id}' target='_blank' >详情</a>
</display:column>
${thin.id}中thin是<display:table的id属性值,id是数据源对象的某个属性
4.创建显示详细信息的JSP页面
<body>
<br>NAME:${something.id}
<br>WEIGHT:${something.weight}
<br>DETAIL:${something.detail}
<br>DETAIL1:${something.detail1}
<br>DETAIL2:${something.detail2}
<br>DETAIL3:${something.detail3}
<br>DETAIL4:${something.detail4}
<br>DETAIL5:${something.detail5}
</body>
Struts2的处理机制会把action中的getter方法封装到作用域对象中,这里是使用el表达式的方式来取值的。
完成以上步骤就可以在显示详情信息页面中显示详情信息了。
Displaytag 使用简介相关推荐
- displayTag使用总结
写点儿东西真不容易,暂时写了这么些,先贴于此. [b]DisplayTag Tutorial by DarrenWang[/b] CopyRight June,2 ...
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- TensorRT简介
TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...
- 谷粒商城学习笔记——第一期:项目简介
一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...
- 通俗易懂的Go协程的引入及GMP模型简介
本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- TVM Operator Inventory (TOPI)简介
TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...
最新文章
- php 请求方式,PHP发起HTTP请求有哪几种方式?
- android 计算运动速度,android – 计算参考真北的加速度
- 计算机如何改变沟通方式,雅思阅读模拟题:计算机改变沟通方式
- WIndows10系统解决“选择电源按钮的功能”中没有休眠选项
- Spark cluster 部署
- HTML5 高频面试题!!!
- Android窗口被隐藏了怎么办,Android studio中IDE窗口怎么显示或者隐藏?
- UserWarning: Usage of dash-separated ‘script-dir‘ will not be supported in future versions. 笔记
- 如何从excel中删除奇数行或偶数行
- winrar 5.80正式版全球发布
- CSS实现带阴影效果的三角形
- 怎么把文字转换成语音?这里有简单的步骤讲解
- 深度学习笔记之稀疏自编码器
- Landsat8遥感影像批量分割(Arcmap实现)
- P1255 数楼梯(笔记侵删)(C语言)
- MBA案例分析(沟通)
- 红牛饮料:借力蓝凌EKP 创造超乎想象的管理支撑能量
- C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)
- iNode安装禁用了u盘停服务也没用
- git本地分支推送到远程分支
热门文章
- 【Android SDM660源码分析】- 04 - UEFI ABL LinuxLoader 代码分析
- sql如何根据父集编号查询多集子集
- GPS网络时间服务器(NTP时钟系统)技术应用方案
- 【论文阅读】An LSTM-Based Deep Learning Approach for Classifying Malicious Traffic at the Packet Level
- margin带一个、二个、三个、四个参数不同的含义。
- itext7学习笔记——第7章
- 基于FPGA的快速FIR算法FFA
- 常用资源环境生态地理空间数据开源下载地址整理
- 配置fabric(超级记账本)时docker安装教程
- 人机博弈过程计算机如何思考,案例 认识人工智能(设计:李月).docx