zoukankan      html  css  js  c++  java
  • display Tag

     关于display:tag的使用 (2011-09-05 14:03:26)
    转载
    ▼
    标签: it     分类: J2EE
    
    关于display:tag的使用
    自定义描述:
    display:tag用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等,反正我在做项目时需要的功能它都给我提供了,而且使用起来非常的方便。能够大大减少代码量。
    一.display:tag使用步骤:
     1.首先要下载display:tag的jar包了。将jar包放到WEB-INF的lib文件夹下。另外还需要其他辅助包:apache的commons-lang,commons-collections和standard包.
     其它包可以访问:Display Tag的官方网站http://displaytag.sourceforge.net。
     2.在web.xml添加   
     <taglib>
      <taglib-uri>http://displaytag.sf.net</taglib-uri>
      <taglib-location>/WEB-INF/displaytag.tld</taglib-location>
     </taglib>
    
     3.在jsp页面添加display:tag标签说明
     <%@ taglib uri="http://displaytag.sf.net" prefix="display" %>
    二、常用功能:
     1.分页
     分页,只需在display:table标签中添加一项pagesize="每页显示行数",
     例如:<display:table name="test" pagesize="10"/>
     2.排序
      display tag可对列进行排序,就是点击列名,对该列的数据进行排序。只需对想要排序的列添加 sort="true"就可以了,在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" 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"DisplayTag,默认会提供三种数据导出方式: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.分组
      分组只是需要在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>
     
    三.标签取得数据的数据源
     1.范围:有四种
     pageScope
     requestScope (默认) <display:table name="test2" >
     sessionScope <display:table name="sessionScope.holder.list" > 注意,这里要指定范围,非默认
     applicationScope
     4. Display Tag的属性设置
    
         前面所说的display:setProperty 是一种改变Display Tag属性的方法,但是在每个jsp中都要写太麻烦了。
    
         Display Tag中设置了很多默认的属性,它有一个专门的属性文件,是在它的jar包中的displaytag/properties/TableTag.properties
        想要改变它的默认属性,我们可以在WEB-INFclasses下新建一个文件displaytag.properties,仿照TableTag.properties中属性的格式设置需要修改的属性。
         TableTag.properties中的# messages中设置的是显示在页面上的提示信息。默认是英文的,我们可以把它改为中文的。不过这里只能使用unicode,就是说中文字符必须转换为 unicode码,这个可以使用jdk自带的native2ascii.exe进行转换。
     四、通过增加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="${row_rowNum}"/>
      </display:column>
      <display:column title="name" >
       <c:out value="${row.first_name}"/>
       <c:out value="${row.last_name}"/>
      </display:column>
     </display:table>
    
    六、显示部分数据
    显示开始五条数据:通过设定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>
    七、对email和url地址的直接连接
     <display:table name="test" >
      <display:column property="id" title="ID" />
      <display:column property="email" />
      <display:column property="url" />
     </display:table>
    
    如果要显示的对象里包含email和url地址,则可以在display:column里直接设定来直接连接
    八、使用装饰模式转换数据显示(写自己的 decorator )
    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);
    }
    
    显然,它获得不了当前对象(因为它实现的是接口),仅仅是获得该对象的columnValue,然后‘油漆’
    创建动态连接
    有两种方法创建动态连接:
    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() + "</a>";
    }
    public String getLink2()
    {
    ListObject lObject= (ListObject)getCurrentRowObject();
    int lId= lObject.getId();
    return "<a href="details.jsp?&action=view">View</a> | "
    + "<a href="details.jsp?&action=edit">Edit</a> | "
    + "<a href="details.jsp?&action=delete">Delete</a>";
    }
    导出数据到其他格式(页面溢出filter??)
    在<display:table/>里设定export="true"<display:column/>里设定media="csv excel xml pdf" 决定该字段在导出到其他格式时被包不包含,不设定则都包含
    <display:setProperty name="export.csv" value="false" />
    决定该种格式能不能在页面中导出
    <display:table name="test" export="true" id="currentRowObject">
    <display:column property="id" title="ID"/>
    <display:column property="email" />
    <display:column property="status" />
    <display:column property="longDescription" media="csv excel xml pdf" title="Not On HTML"/>
    <display:column media="csv excel" title="URL" property="url"/>
    <display:setProperty name="export.pdf" value="true" />
    <display:setProperty name="export.csv" value="false" />
    </display:table>
             配置属性,覆盖默认
    两种方法:
    A、在程序classpath下新建displaytag.properties文件
    B、对于单个表格,应用<display:setProperty>标签
    具体可配置的属性:http://displaytag.sourceforge.net/configuration.html
    具体示例:
    <display:table name="test" export="true" sort="list" pagesize="8">
    <display:column property="city" title="CITY" group="1" sortable="true" headerClass="sortable"/>
    <display:column property="project" title="PROJECT" group="2" sortable="true" headerClass="sortable"/>
    <display:column property="amount" title="HOURS"/>
    <display:column property="task" title="TASK"/>
    </display:table>
    sort="list" 对整个list进行排序
    导出数据到其他格式时,group无效
    在这里我要提出一点,当display tag显示的数据与后台所给的数据不一致,可以用JSTL:
    <display:table name=".." id="listTable" pagesize=".." class=".."
                       export="true" requestURI="">
    <display:column sortable="true" headerClass="sortable" title="TYPE">
                <c:if test="${listTable.type==0}"><!--listTable必须与上面的display:table的id属性值相同-->
                    类型0
          </c:if>
                <c:if test="${listTable.type==1}">
                    类型1
         </c:if>
                <c:if test="${listTable.type==2}">
                    类型2
        </c:if>
                <c:if test="${listTable.type==3}">
                    类型3
        </c:if>
            </display:column>
  • 相关阅读:
    A1091. Acute Stroke
    A1103. Integer Factorization
    A1097. Deduplication on a Linked List
    A1074. Reversing Linked List
    设计模式之装饰模式
    基于UML的需求分析和系统设计
    软件测试开篇
    当抽象类遇到单例模式
    设计模式开篇
    此刻开始,点滴积累
  • 原文地址:https://www.cnblogs.com/cuitrek/p/5057275.html
Copyright © 2011-2022 走看看