displaytag 的使用
displaytag的官方网站http://displaytag.sourceforge.net。
1.DisplayTag标签库概述
(1)概述
DisplayTag是一个开源的自定义标签库(Custom Tag lib),他提供了直接而有效的格式化web视图层数据的有效手段。可以在web应用的MVC模式中集成DisplayTag到View层,其提供的强大表格格式化功能,用来处理jsp网页上的Table,可以对的Table进行分页、数据导出、分组、对列排序等等,能够大大减少代码量。
(2)常用标签
(1) display:table</display: table >
DisplayTag标签库中最重要最核心的标签,上面的标签都是嵌套在它里面来使用的。其核心作用是将给定的对象以html表格形式来显示,根据display:column标签格式化每一个项
(2)display:column</display: column >
显示表格中的一个行对象的一个属性。
(3)display:footer</display: footer >     
嵌套在display:table标签中,在表格的最后一行数据之后显示的信息。
(4) display:caption</display:caption>  
它的作用相当于html页面的标签。模仿的简单标记的html标题标记。 表标记中使用它来显示标题。

2.使用前的准备工作:
(1)添加所需的标签包
commons-beanutils.jar
commons-collection.jar
commons-lang.jar
displaytag.jar
displaytag-export-poi.jar
itext.jar
jstl.jar
standard.jar
(2)在web.xml下添加一个filter

exportFilter
org.displaytag.filter.ResponseOverrideFilter

(3)在jsp页面做一个引用:
<%@ taglib uri=“http://displaytag.sf.net/el” prefix=“display” %>

  1. Display的常用功能:
    (1)表格显示样式的定义
    <display:table name=“test” styleClass=“list” cellspacing=“0” cellpadding=“0” defaultsort=“1”>
    <display:column property=“id” title=“ID” class=“idcol” sort=“true”/>
    <display:column property=“name” url=“detail.jsp” paramId=“id” paramProperty=“id” sort=“true”/>
    <display:column property=“email” autolink=“true” sort=“true”/>
    <display:column property=“description” title=“Comments”/>
    </display:table>
    property对应List里对象的属性(用getXXX()方法取得),title则对应表格表头里的列名。定义列有两种方式:
      A、<display:column property=“email” />
      使用display:column/标签里的property属性来定义
      B、<display:column title=“email”>email@it.com</display:column>
      在display:column/标签体里增加内容,可以是常量,也可以用其他标签等等,用property属性来定义更加快速和利于排序
    (2)标签取得数据的数据源
    有四种范围:
    pageScope
      requestScope (默认):<display:table name=“test2” >
      sessionScope:<display:table name=“sessionScope.holder.list” > 注意,这里要指定范围,非默认
      applicationScope
    (3)通过增加id属性创建隐含的对象
    <display:table name=“test” id=“testit”>
      <display:column property=“id” title=“ID” />
      <display:column property=“name” />
      <display:column title=“static value”>static</display:column>
    <display:column title=“row number (testit_rowNum)”>
    <%=pageContext.getAttribute(“testit_rowNum”)%></display:column>
    <display:column title="((ListObject)testit).getMoney()">
    <%=((ListObject)pageContext.getAttribute(“testit”)).getMoney()%></display:column>
    </display:table>
    注意到在display:table/里增加了id属性,这时就在page context里创建了一个隐含对象,指向List里的当前对象,可以通过(ListObject)pageContext.getAttribute(“id”)来捕获这个对象。同时还创建了一个id_rowNum对象,同样,可通过pageContext.getAttribute(“testit_rowNum”)来捕获,它仅仅代表当前行的行数。有了这两个隐含对象,就可以通过其他标签来访问,例如Jstl:
      <display:table id=“row” name=“mylist”>
      <display:column title=“row number” >
      <c:out value="rowrowNum&quot;/&gt;&lt;/display:column&gt;&lt;display:columntitle=&quot;name&quot;&gt;&lt;c:outvalue=&quot;{row_rowNum}&quot;/&gt;   &lt;/display:column&gt;   &lt;display:column title=&quot;name&quot; &gt;   &lt;c:out value=&quot;rowr​owNum"/>  </display:column>  <display:columntitle="name">  <c:outvalue="{row.first_name}"/>
      <c:out value="${row.last_name}"/>
      </display:column>
      </display:table>
    (4)分页
    <display:table name=“sessionScope.test” pagesize=“10”>
      <display:column property=“id” title=“ID” />
      <display:column property=“name” />
      <display:column property=“email” />
      <display:column property=“status” />
      </display:table>
    如果想对代码分页,只需在display:table标签中添加一项pagesize=“每页显示行数”,如
    <display:table name=“test” pagesize=“10”/>
    (5)显示部分数据
    显示开始五条数据:通过设定length属性
      <display:table name=“test” length=“5”>
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      </display:table>
      显示第三到第八条数据:通过设定offset和length属性
      <display:table name=“test” offset=“3” length=“5”>
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      </display:table>
    (6)对列进行排序
    display tag可对列进行排序,就是点击列名,对该列的数据进行排序。你只需对想要排序的列添加 sort=“true” 就OK,如下面的代码可对前三列进行排序。在display:table中添加defaultsort=“列数”,可默认对指定的列排序。
    如果table有分页,Display Tag默认只对当前页进行排序,如果想对整个list排序,可以在display:table之间添加一段代码:
    <display:setProperty name=“sort.amount” value=“list”/>
    (7)导出数据
    在display:table中添加export=“true”,看看会出现什么!Display Tag默认会提供三种数据导出方式:CSV、Excel、XML 。
    另外Display Tag还可以导出为PDF格式,在http://prdownloads.sourceforge.net/itext/下载一个辅助包iText.jar,copy到lib目录下,然后在display:table之间添加一段代码:
    <display:setProperty name=“export.pdf” value=“true”/>
    (8)对email和url地址的直接连接
    <display:table name=“test” >
      <display:column property=“id” title=“ID” />
      <display:column property=“email” autolink=“true” />
      <display:column property=“url” autolink=“true” />
      </display:table>
      如果要显示的对象里包含email和url地址,则可以在display:column里直接设定autolink="true"来直接连接
    (9)使用装饰模式转换数据显示
    A、对整个表格应用decorator
      <display:table name=“test” decorator=“org.displaytag.sample.Wrapper” >
      <display:column property=“id” title=“ID” />
      <display:column property=“email” />
      <display:column property=“status” />
      <display:column property=“date” />
      <display:column property=“money” />
      </display:table>
      org.displaytag.sample.Wrapper即自己写的decorator,它要继承TableDecorator类,看看它的一个方法:
      public String getMoney()
      {
      return this.moneyFormat.format(((ListObject) this.getCurrentRowObject()).getMoney());
      }
      很明显,它通过父类的getCurrentRowObject()方法获得当前对象,然后对其getMoney()方法进行‘油漆’
      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.LongDateWrapper” />
      </display:table>
      org.displaytag.sample.LongDateWrapper要实现ColumnDecorator接口,它的方法:
      public final String decorate(Object columnValue)
      {
      Date date = (Date) columnValue;
      return this.dateFormat.format(date);
      }
    (10)创建动态链接
    有两种方法创建动态连接:
      A、在display:column/里通过增加href、paramId、paramName、paramScope、paramProperty属性
      href  基本的URL 地址
      paramId 加在URL 地址后的参数名称
      paramName 数据bean的名称,一般为null(即使用当前List里的对象)
      paramScope  数据bean的范围,一般为null
      paramProperty  数据bean的属性名称,用来填充URL 地址后的参数值
      <display:table name=“sessionScope.details”>
       <display:column property=“id” title=“ID” href=“details.jsp” paramId=“id” />
      <display:column property=“email” href=“details.jsp” paramId=“action” paramName=“testparam” paramScope=“request” />
       <display:column property=“status” href=“details.jsp” paramId=“id” paramProperty=“id” />
      </display:table>
      这种方法简便直接,但缺点是无法产生类似details.jsp?id=xx&action=xx的复合URL
      B、应用decorator 创建动态连接:
      <display:table name=“sessionScope.details” decorator=“org.displaytag.sample.Wrapper” >
       <display:column property=“link1” title=“ID” />
       <display:column property=“email” />
       <display:column property=“link2” title=“Actions” />
      </display:table>

org.displaytag.sample.Wrapper里的方法:
  public String getLink1()
  {
  ListObject lObject= (ListObject)getCurrentRowObject();
  int lIndex= getListIndex();
  return “<a href=“details.jsp?index=” + lIndex + “”>” + lObject.getId() + “”;
  }
  public String getLink2()
  {
  ListObject lObject= (ListObject)getCurrentRowObject();
  int lId= lObject.getId();
  return "<a href=“details.jsp?id=” + lId
  + “&action=view”>View | "
  + "<a href=“details.jsp?id=” + lId
  + “&action=edit”>Edit | "
  + “<a href=“details.jsp?id=” + lId
  + “&action=delete”>Delete”;
  }
(11)column分组
分组只是需要在column里增加group属性:列中按组显示
<display:table name=“test” class=“simple”>
<display:column property=“city” title=“CITY” group=“1”/>
<display:column property=“project” title=“PROJECT” group=“2”/>
<display:column property=“amount” title=“HOURS”/>
<display:column property=“task” title=“TASK”/>
</display:table>
(12)统计
可以对分组进行统计,也可以对所有行进行统计。   主要靠TableDecorator类finishRow()返回统计结果,放到页面去显示。
(13)表格中嵌套表格
<dispaly:column ><display:table 表格中的内容></display:table> </display:column>  
4. displaytag的翻页机制
 displaytag的翻页机制 这可能是displaytag的局限性了,它的翻页机制是这样的: 如果一个list中有10000个bean,按照它的机制,如果是第一页(每页n条),它会把前n条数据取出来,然后再把剩余的10000-n条删除,当你点击页面“2”的时候,它再从后台绕一圈,把第二页的数据,也就是把第n+1-2n条记录取出来,把剩余的删除。这样,它实现了翻页,又防止了内存占用过大。 但是,不管怎么说,它还是有一个取出所有条数的动作的,在极大数据量的情况下,有可能造成内存溢出。
5. Displaytag属性配置
前面所说的display:setProperty 是一种改变Display Tag属性的方法,但是在每个jsp中都要写太麻烦了。
Display Tag中设置了很多默认的属性,它有一个专门的属性文件,是在它的jar包中的displaytag/properties/TableTag.properties想要改变它的默认属性,我们可以在WEB-INF\classes下新建一个文件displaytag.properties,仿照TableTag.properties中属性的格式设置需要修改的属性。
TableTag.properties中的# messages中设置的是显示在页面上的提示信息。默认是英文的,我们可以把它改为中文的。不过这里只能使用unicode,就是说中文字符必须转换为 unicode码,这个可以使用jdk自带的native2ascii.exe进行转换。

  1. 简单使用
    首先我们定义一个list
    <%
    List test = new ArrayList( 6 );
    test.add( “Test String 1” );
    test.add( “Test String 2” );
    test.add( “Test String 3” );
    test.add( “Test String 4” );
    test.add( “Test String 5” );
    test.add( “Test String 6” );
    request.setAttribute( “test”, test );
    %>

    当我们想在jsp页面上显示这个list时,我们只需要写一句话
    <display:table name=“test” />
    display tag会自动生成一个table

    如果list是从控制层抛出来的,name可使用EL表达式表示
    <display:table name="${test}" />

    这是最简单的display tag的使用,我们可以给它加上样式等,也可以定义显示的列,下面的table显示复杂一些
    <display:table name=“test” styleClass=“list” cellspacing=“0” cellpadding=“0”>
    <display:column property=“id” title=“ID” class=“idcol”/>
    <display:column property=“name” />
    <display:column property=“email” />
    <display:column property=“description” title=“Comments”/>
    </display:table>

    如果想要给它加个链接也很简单,下面的代码给name加了连接,并附带id参数,email也自动连接到mailto:XXX
    <display:table name=“test” styleClass=“list” cellspacing=“0” cellpadding=“0”>
    <display:column property=“id” title=“ID” class=“idcol”/>
    <display:column property=“name” url=“detail.jsp” paramId=“id” paramProperty=“id”/>
    <display:column property=“email” autolink=“true”/>
    <display:column property=“description” title=“Comments”/>
    </display:table>
    7.displaytag的优缺点
     1,支持表格的嵌套.
     2,支持css这样就能写少量地代码使得程序更简洁.只好定义好一套css,就能全局范围内使用了.
     3,另外还支持截断长的字符串,这样就不用在页面使用自己的方法了. 
     4,能够实现比较复杂的逻辑从而产生动态链接。这也勉强所以个好处吧。
     5,能轻松地使用struts的资源文件。使得它可以很好的国际化。
     6,能够过滤空值。
    种功能设计得很体贴、很实用,效率也不错。导出、分页、排序都很方便,外
    观设计也很便于修改。

缺点: 
 1,分组就使用不了了,统计也无法使用了。只统计当前页是没有意义的。
 2,排序也变成当前页排序了。没多少意思。
 3,导出也变成当前页导出了,没多少意思了。

displaytag 的使用相关推荐

  1. displaytag 导出

    只使用displaytag的导出功能,表单展示用jqgrid实现.只需要后台修改一部分代码,其他的表单都能使用这个功能导出.导出四种文件格式:csv,excel,xml,pdf. 思路:在过滤器中处理 ...

  2. displaytag 相关

    1.获取某列(如: id)的值 struts 2: <display:table name="usersInfo" id="tabrow" pagesiz ...

  3. #displaytag:一个简易的Java分页插件(无需其他的前端分页插件) @FDDLC

    一.话题引入: 在开发一个某某系统时,经常要用到分页. 比如PageHelper,它是后端分页插件,如果要在前端展示分页效果,要么自己编写前端的分页逻辑,要么再上一个前端分页插件. 而displayt ...

  4. displaytag用法总结

    DisplayTag是一个非常好用的表格显示标签,适合MVC模式,其主页在http://displaytag.sourceforge.net 一.最简单的情况,未使用<display:colum ...

  5. displaytag的使用

    今天研究起displaytag标签来 分享下感想 这个东西吧功能倒是很强大 但是有很多不足 就本人使用来看 首先网上有很多例子关于配置的在这里我也转载一份 下面得部分是转载的 但有一点需要注意 就是包 ...

  6. Displaytag 使用简介

    一 简介 Display Tag Lib是一个标签库,用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页.数据导出.分组.对列排序等等. 二 安装使用 1.在displaytag ...

  7. displayTag使用总结

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

  8. DisplayTag应用总结

    我们目前开发的java Web项目中用到了DisplayTag,使用时参考了下面这篇网上找到的总结文档,感觉总结的很好,贴出来,供需求者参考. DisplayTag是一个非常好用的表格显示标签,适合M ...

  9. Displaytag用法整理

    Displaytag用法整理一 1. Displaytag提供的默认的系统提示均为英文,有两种方法进行汉化: 1).将displaytag-1.1.1.jar中自带的org/display/prope ...

  10. displaytag 中文问题 探索日志 注释

    重新上路: displayTagSupport库中: itext-1.3.jar commons-lang-2.6.jar standard.jar commons-beanutils-1.8.3.j ...

最新文章

  1. R语言威布尔分布函数F Distribution(dweibull, pweibull, qweibull rweibull )实战
  2. Gitlab+Jenkins学习之路(三)之gitlab权限管理--issue管理
  3. Skin设计小组新作品发布—绿草蓝天
  4. 打开指定大小的新窗口
  5. vb.net2019-多线程并行计算(6)
  6. 关于「Xception」和「DeepLab V3+」的那些事
  7. 在聊Java中的equals方法
  8. [css] 如何让IE6支持min-width和max-width?
  9. 定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...
  10. 容器编排技术 -- Kubernetes kubectl rollout history 命令详解
  11. 解决IE8上传文件时javascript取文件的本地路径的问题C:\fakepath\..
  12. 大数据之_SCALA工作笔记001---Centos7.3安装scala
  13. 女神相册密码忘记了,我只用Python写了20行代码
  14. 面试题02.07.链表相交
  15. 微信js-sdk集成小结
  16. Java如何进行Base64的编码(Encode)与解码(Decode)
  17. 京东商城网站服务器分析
  18. 分享10个优秀的技术栈社区
  19. hao.360.cn不停跳....
  20. python 实现QQ邮箱发送邮件

热门文章

  1. 玩客云pc端_玩客云下载-玩客云电脑版下载-华军软件园
  2. SQL注入语法类型和sql盲注
  3. STM32 跑马灯程序设计
  4. KL散度、JS散度和交叉熵
  5. Debian彻底卸载MySQL
  6. 地理空间数据和大数据平台Spark结合能做的事情
  7. 第一篇 Object-C快速入门
  8. 贵州省中职学校计算机教材电子版,中职计算机基础课件贵州省中职学校计算机应用基础教学工作计划.doc...
  9. 全国计算机软考程序员考试大纲(2012)
  10. 一个厂商网站的SQL安全检测 (啊D、明小子)