Displaytag 使用简介

来源:互联网 发布:rep报表软件下载 编辑:程序博客网 时间:2024/04/30 06:17

简介

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支持导出  默认有CSVEXCELXML 3种格式

//display:setProperty 替换displaytag.properties 属性文件中的属性

//添加了iText包以后name="export.pdf" value="true"可以支持导出PDFRTF

//<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, yyyyMMdd}"/>

输出:20090606

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表达式的方式来取值的。

完成以上步骤就可以在显示详情信息页面中显示详情信息了。

原创粉丝点击