简介

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:tableid属性值,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 使用简介相关推荐

  1. displayTag使用总结

    写点儿东西真不容易,暂时写了这么些,先贴于此. [b]DisplayTag Tutorial by DarrenWang[/b]                    CopyRight June,2 ...

  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  3. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  4. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  5. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  6. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  7. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  8. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  9. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

最新文章

  1. php 请求方式,PHP发起HTTP请求有哪几种方式?
  2. android 计算运动速度,android – 计算参考真北的加速度
  3. 计算机如何改变沟通方式,雅思阅读模拟题:计算机改变沟通方式
  4. WIndows10系统解决“选择电源按钮的功能”中没有休眠选项
  5. Spark cluster 部署
  6. HTML5 高频面试题!!!
  7. Android窗口被隐藏了怎么办,Android studio中IDE窗口怎么显示或者隐藏?
  8. UserWarning: Usage of dash-separated ‘script-dir‘ will not be supported in future versions. 笔记
  9. 如何从excel中删除奇数行或偶数行
  10. winrar 5.80正式版全球发布
  11. CSS实现带阴影效果的三角形
  12. 怎么把文字转换成语音?这里有简单的步骤讲解
  13. 深度学习笔记之稀疏自编码器
  14. Landsat8遥感影像批量分割(Arcmap实现)
  15. P1255 数楼梯(笔记侵删)(C语言)
  16. MBA案例分析(沟通)
  17. 红牛饮料:借力蓝凌EKP 创造超乎想象的管理支撑能量
  18. C++设计模式--单例模式详解(懒汉模式、饿汉模式、双重锁)
  19. iNode安装禁用了u盘停服务也没用
  20. git本地分支推送到远程分支

热门文章

  1. 【Android SDM660源码分析】- 04 - UEFI ABL LinuxLoader 代码分析
  2. sql如何根据父集编号查询多集子集
  3. GPS网络时间服务器(NTP时钟系统)技术应用方案
  4. 【论文阅读】An LSTM-Based Deep Learning Approach for Classifying Malicious Traffic at the Packet Level
  5. margin带一个、二个、三个、四个参数不同的含义。
  6. itext7学习笔记——第7章
  7. 基于FPGA的快速FIR算法FFA
  8. 常用资源环境生态地理空间数据开源下载地址整理
  9. 配置fabric(超级记账本)时docker安装教程
  10. 人机博弈过程计算机如何思考,案例 认识人工智能(设计:李月).docx