display初步

display 起步

 

Tag Lib 是一个标签库,用来处理 jsp 网页上的 Table ,功能非常强,可以对的 Table 进行分页、数据导出、分组、对列排序等等,反正

我在做项目时需要的功能它都给我提供了,而且使用起来非常的方便。能够大大减少代码量。
   
这个是 Display Tag 的官方网站 http://displaytag.sourceforge.net
   

首先当然是要下载它的 jar 包了,这里可以下载到最新的版本。将 jar 包放到 WEB-INF lib 文件夹下。另外还需要两个辅助 包: apache commons

-lang standard 包,更多的辅助包可以在这里下载。
   
web.xml 下添加一个 filter
    <filter>
        <filter-name>exportFilter</filter-name>
        <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
    </filter>
   
jsp 页面做一个引用:
<%@ taglib uri="http://displaytag.sf.net " prefix="display" %>
   
首先我们定义一个 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

<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>
子:

下面介绍几个 Display 最常用的功能,更多功能请参考 http://www.displaytag.org/index.jsp
1.
分页
   
如果想对代码分页,只需在 display:table 标签中添加一项 pagesize=" 每页显示行数 " ,如
<display:table name="test" pagesize="10"/>
2.
对列排序
    display tag
可对列进行排序,就是点击列名,对该列的数据进行排序。你只需对想要排序的列添加 sorttable="true" OK ,如下面的代码可

对前三列进行排序。在 display:table 中添加 defaultsort=" 列数 " ,可默认对指定的列排序。
<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>
  
如果 table 有分页, Display Tag 默认只对当前页进行排序,如果想对整个 list 排序,可以在 display:table 之间添加一段代码:
<display:setProperty name="sort.amount" value="list"/>
3.
导出数据
   
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"/>
,大功告成。
4. Display Tag
的属性设置
   
前面所说的 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 进行转换。
5. displaytag
decorator 的使用原理
decorator
有两种,一种是用在 displaytag:table 中,一种是用在 displaytag:column 中,前者对整个表中相应属性有效,后者对单个列有效。

所以,在前者中,你一定要在响应的 decorator 类中写上 get 方法,命名方式为 get+beanProperty bean 属性),前者 需继承 TableDecorator

,后者只需实现 ColumnDecorator 类的 decorate 方法即可( return 一个 String )。

关于 decorator 的原理,是这样的,当使用 decorator 属性时,数据先从 bean 中被取出,然后被传入进 decorator ,前者 是在 decorator 类中调用 g

etCurrentRowObject 方法得到当前 bean ,继而再调用 bean get 方法将属性取出

    public String getDate()
    {
        return this.dateFormat.format(((ListObject) this.getCurrentRowObject()).getDate());
    }
 
),
后者是数据直接被传进其 decorate 方法 .
当数据被处理完成后,再返回到页面显示,所以说, decorator 类其实是将原有属性的 value 进行包装后输出的包装 器,它的英文意思为油漆工

,也就是这个意思,这也是一种基本设计模式

但是如果碰到你想要输出一个 checkbox 或者 radio 时,你可以覆盖掉以前的输入,直接输出自己想要的东西,像这样 return " "; 那么你就

把输入进包装器的数据覆盖成 checkbox 输出了。
6.  displaytag
的翻页机制
这可能是 displaytag 的局限性了,它的翻页机制是这样的:

如果一个 list 中有 10000 bean ,按照它的机制,如果是第一页(每页 n 条),它会把前 n 条数据取出来,然后再把剩余的 10000 n 条删除,当你

点击页面 “2” 的时候,它再从后台绕一圈,把第二页的数据,也就是把第 n+1-2n 条记录取出来,把剩余的删除。这样,它实现了翻页,又防止

了内存占用过大。

但是,不管怎么说,它还是有一个取出所有条数的动作的,在极大数据量的情况下,有可能造成内存溢出。
8. displaytag
decorator 一例
后台部分:
=======================================================
import org.displaytag.decorator.TableDecorator;
import java.util.HashMap;
import java.text.SimpleDateFormat;
import java.util.Date;
public class BulletinListDecorator extends TableDecorator{
  private String bulletinId = null;
  private String title = null;
  private SimpleDateFormat sdf = null;
  private int i = 0;
  public BulletinListDecorator() {
    sdf = new SimpleDateFormat("yy-MM-dd");
  }
  public String getBulletinId(){
    i+=1;
    return ""+i;
  }
  public String getTitle(){
    bulletinId = (String)((HashMap) this.getCurrentRowObject()).get("bulletinId"); 
    title = (String)((HashMap) this.getCurrentRowObject()).get("title");
    return ""+title+"";
  }
  public String getLastPubD(){
    return sdf.format((Date)((HashMap) this.getCurrentRowObject()).get("lastPubD"));
  }
}
====================================================

前台部分:
====================================================
   <display:table name="bulletinList" class="OuterTable"                            

decorator="com.ztesoft.ds.application.web.bulletin.decorator.BulletinListDecorator">
        <display:column property="bulletinId" titleKey="titlePage.seq" align="center" class="ValueTd"                        

    headerClass="ValueTd"/>
        <display:column property="title" titleKey="titlePage.title" align="center" class="ValueTd" headerClass="ValueTd"/>
        <display:column property="lastPubD" titleKey="titlePage.time" align="center" class="ValueTd"                         

   headerClass="ValueTd"/>
        <display:column property="className" titleKey="titlePage.class" align="center" class="ValueTd"                       

     headerClass="ValueTd"/>
        <display:column property="clickNo" titleKey="titlePage.clickNo" align="center" class="ValueTd"                       

     headerClass="ValueTd"/>
   </display:table>

其中 bulletinList 是一个 ArrayList titleKey 指向了 properties 文件

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值