`
esffor
  • 浏览: 1371865 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

display tag入门

阅读更多
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/el" 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: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可对列进行排序,就是点击列名,对该列的数据进行排序。你只需对想要排序的列添加 sort="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文件
====================================================
 

分享到:
评论

相关推荐

    Struts 入门实践 随书光盘

    开发者可以通过使用JSP标记库(Tag Libraries),如Struts的Tiles或Struts2的Display Tag,来增强JSP的可重用性和易维护性。 在《Struts 入门实践》的随书光盘中,"bbs"可能代表了一个示例项目——一个论坛系统。这...

    jUnit入门教程 jUnit教程

    jUnit 5引入了JUnit Jupiter模块,提供了新的API和注解,比如`@DisplayName`、`@Tag`、`@Nested`等,增强了测试的可读性和组织性。 通过本教程,你应该能掌握jUnit的基本用法,并能在实际项目中编写和执行单元测试...

    《HCIA数通入门》期末A卷附答案

    6. **Hybrid端口**:Hybrid端口允许数据帧在进出端口时携带或剥离VLAN标签,可以根据需要配置是否发送tag,接收时不局限于带tag的数据帧。 7. **ACL访问控制**:高级ACL(Advanced ACL)的编号范围是2000-2999,...

    Web入门初学者纯静态页面练习 HTML+CSS 布局、浮动练习

    在描述中提到的“布局练习”,很可能是让你通过CSS的`display`属性,比如`block`、`inline`、`flexbox`或`grid`,来实现不同类型的布局。浮动(float)是早期常用的布局方法,通过设置`float:left`或`float:right`,...

    JavaScript的MVVM库Vue.js入门学习笔记_.docx

    ### JavaScript的MVVM库Vue.js入门学习笔记 #### 一、Vue.js简介 Vue.js是一个用于构建用户界面的渐进式框架。它被设计为可以自底向上逐层应用,并且可以在现有项目中逐步地引入,而不是一次性地重写整个项目。Vue...

    Ajax技术详细代码实例《Ajax实例入门》

    在JSP中,可以使用`&lt;jsp:include&gt;`或自定义标签库(Tag Library)来实现Ajax功能。JSP页面通常包含一个隐藏的iframe,用于接收Ajax响应。通过JavaScript控制iframe的src属性,发起Ajax请求,并处理响应。 ```jsp &lt;!...

    python入门到高级全栈工程师培训 第3期 附课件代码

    python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...

    HTML CSS入门级常用知识点归纳总结(结尾实战练习附源码)

    display: inline; margin-right: 10px; } nav a { color: #fff; text-decoration: none; } section { margin: 20px 0; } /* 高亮当前选中的导航项 */ nav a:hover, nav a:active { text-decoration: ...

    Struts框架标签库的中文使用文档

    `welcome*.txt`文件可能是一些示例或入门指南,用于演示如何在实际项目中使用这些标签。例如,`welcome1.txt`可能介绍了一个基本的欢迎页面的创建,使用了Struts的标签来展示信息;`welcome2.txt`可能涉及用户输入...

    struts 资料

    《第三十章 struts入门.doc》可能是教程的起始部分,旨在介绍Struts的基本概念。在这一章节中,你可能会学习到以下内容: 1. **MVC模式**:了解MVC设计模式的基本理念,它是如何将业务逻辑、数据模型与用户界面分离...

    HTML ppt 教程

    每个标签都有起始标签和结束标签,以尖括号包围,如`&lt;tag&gt;`和`&lt;/tag&gt;`。 在HTML中,学习如何使用表格(`&lt;table&gt;`)、列表(`&lt;ul&gt;`、`&lt;ol&gt;`、`&lt;li&gt;`)、图像(`&lt;img&gt;`)和链接(`&lt;a&gt;`)是非常重要的。`&lt;a&gt;`标签是...

    lcd_st7701s_mipi_7701s_sc7731g_mipi_ST7701S_

    SC7731G处理器支持MIPI DSI(Display Serial Interface)协议,这是一种高速、低功耗的串行接口,用于连接处理器和显示面板。 MIPI DSI是一种专门为移动设备设计的显示接口标准,它使用较少的信号线来传输大量的...

    EOS标签例子(RichWeb)

    例如,`&lt;eos:display&gt;`标签用于显示数据,`&lt;eos:input&gt;`用于收集用户输入,`&lt;eos:form&gt;`用于构建表单,以及可能的一些自定义行为标签如`&lt;eos:ajax&gt;`用于异步数据交换等。 通过研究这些标签的使用,开发者可以更好地...

    论城市轨道交通BAS系统(HMI)触摸屏下位PLC程序 制作.pdf

    在实际工程应用中,需要创建并导入工程,修改“Display”项以及画面和按钮的数量、间距、设备数量和设备编号。在“MS*”画面中,可能需要修改模式名称,增加或删除状态,并进行状态属性的设置。 在实际操作过程中,...

    JUnit教程工程代码实例+PDF下载.zip

    JUnit5作为最新版本,引入了一些新特性,如`@Tag`注解用于标记和选择性运行特定测试,`@DisplayName`用于自定义测试方法的显示名称,以及更强大的异步测试支持等。 在本教程的PDF部分,可能会详细讲解这些概念,并...

    5日精通CSS层叠样式表

    **CSS(层叠样式表)基础入门** 在网页设计领域,CSS(层叠样式表,Cascading Style Sheets)是不可或缺的一部分,它赋予了HTML或XML文档强大的视觉表现力。CSS允许开发者分离内容与表现,使得网站设计更具灵活性、...

    ThinkPHP模板自定义标签使用方法

    开发者可以创建一个继承Action的控制器类,在其中的index方法里直接使用$this-&gt;display()方法来渲染模板,标签的逻辑已经在标签类中定义,控制器无需再进行数据处理。 自定义标签的使用不仅仅局限于模板显示数据,...

    大学生影视主题网页制作 HTML+CSS+JS仿360影视网站 dreamweaver电影HTML网站制作

    - **适用场景**:适用于大学生在完成课程作业时使用,也可作为网页设计入门者学习和练习的案例。 ##### 2. **技术栈与编辑工具** - **技术栈**:项目采用了HTML5、CSS3以及JavaScript技术,这些都是现代网页开发...

Global site tag (gtag.js) - Google Analytics