基于DisplayTag

 

Display Tag Lib是一个标签库,用来处理jsp网页上的Table,功能非常强,可以对的Table进行分页、数据导出、分组、对列排序等等。具体的说明请参考Display Tag的官方网站http://displaytag.sourceforge.net

       DisplayTag为一个开源的标签库,使用DisplayTag必须从网站下载DisplayTagjar包,并将jar引用到用户所用的工程中。

       同时,DisplayTag.jar依赖Apache项目的支持,所以在使用同时,必须下载Apache相关的jar包。

 

配置类库标签

DisplayTag使用了两个标签,displaytag-1.1.tldfmt.tld。使用了servlet2.4以前的版本,需要在web.xml中配置。

<taglib>

    <taglib-uri>http://displaytag.sourceforge.net/</taglib-uri>

    <taglib-location>/WEB-INF/displaytag-11.tld</taglib-location>

  </taglib>

  <taglib>

      <taglib-uri>/WEB-INF/fmt</taglib-uri>

      <taglib-location>/WEB-INF/fmt.tld</taglib-location>

  </taglib>

两个标签中,displaytag-1.1.tldDisplayTag的官方标签,另外fmt.tld的标签作用是为了显示中文而设定的。

 

构造页面显示的List

DisplayTag能够在requestsession范围内获得相关的List。所有的数据必须从List中获得。

 

1.单表查询结果集

List userList=getHibernateTemplate().find(“from user”);

Request.setAttribute(“userList”, userList);

2.多表查询结果集

List userCustomerList=getHibernateTemplate().find(“select new MyObject(user.Name,user.No…..) from user,customer”);

Request.setAttribute(“userCustomerList”,” userCustomerList”);

要先定义好MyObject这个class,并且有new MyObject(….)构造函数

3.以上两种方法每次在翻页时,都是对所有查询结果进行一次查询,如果想实现每次只查询10条数据,则需要自己构造sql执行。DisplayTag提供了一些变量.

String strPage = request.getParameter("page");

String strDir = request.getParameter("dir");

String strSort = request.getParameter("sort");

Actionrequest里面获得这三个参数,都是DisplayTag自动生成的,用户无需管理这三个参数。

 

DisplayTag页面基本组成

1.     要引入标签

<%@ taglib uri="/WEB-INF/fmt.tld"             prefix="fmt" %>

<%@ taglib uri="http://displaytag.sf.net/el"        prefix="display" %>

2.     在页面上使用displayTag标签

1) 最简单的情况

标签遍历List里的每一个对象,并将对象里的所有属性显示出来。一般用于开发的时候检查对象数据的完整性。

2) 使用 标签的情况      

  property对应List里对象的属性(用getXXX()方法取得),title则对应表格表头里的列名。定义列有两种方式:

  A

  使用 标签里的property属性来定义

  B email@it.com

  在 标签体里增加内容,可以是常量,也可以用其他标签等等

两种方式比较,用property属性来定义更加快速和利于排序

3) 表格显示样式的定义

A、        标签里指定标准的html属性

style=”……”>

style=”……”/>

   B、修改样式表

   class="mars">

   class="idcol"/>

 

 

通过 class 属性来指定所要应用的样式 ( 自己定义的样式 ) 。也还可以在其默认样式表里( ./css/screen.css )直接修改

 

4) 标签取得数据的数据源

  有四种范围

  pageScope

  requestScope (默认) 

  sessionScope  注意,这里要指定范围,非默认

  applicationScope

5) 通过增加id属性创建隐含的对象

id="row" name="mylist">

 

 

6) 显示部分数据

显示开始五条数据:通过设定length属性

  显示第三到第八条数据:通过设定offsetlength属性

   id"

  ${row.first_name}-${row.last_name}

注意到在 里增加了 id 属性,这时就在 page context 里创建了一个隐含对象,指向 List 里的当前对象 ; 同时还创建了一个 id_rowNum 对象 , 它仅仅代表当前行的行数。
简单,简易使用 package auvtech; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport { private String name="page"; private String action; private int measurement; public void setName(String name) { this.name = name; } public void setAction(String action) { this.action = action; } public void setMeasurement(int measurement) { this.measurement = measurement; } @Override public int doStartTag() throws JspException { try{ JspWriter out = pageContext.getOut(); Pageination page=(Pageination)pageContext.getSession().getAttribute(name); //在page中只有3个属性是已知的,1,一共多少记录,2,一页显示多少记录,3,以及返回的结果集 //1.重新给page分布内容 setPage(page); //2.输出html out.print(getHtml(page)); //3.输出js out.print(getJs(page)); }catch(IOException ioException){ throw new JspException(ioException.getMessage() ); } return(SKIP_BODY); } private void setPage(Pageination page){ if (page.getMaxNoteNum() != 0) { // 一共多少页 if (page.getOnePageMaxNum() != 0&&page.getMaxNoteNum() % page.getOnePageMaxNum() == 0) { page.setMaxPageNum(page.getMaxNoteNum() / page.getOnePageMaxNum()); } else if(page.getOnePageMaxNum()!= 0){ page.setMaxPageNum(page.getMaxNoteNum() / page.getOnePageMaxNum() + 1); } }else { page.setMaxPageNum(0); } //设置当前页记录数目 if(page.getResultList()!= null) page.setCurrentPageNoteNum(page.resultList.size()); else page.setCurrentPageNoteNum(0); } //生成html代码 private String getHtml(Pageination page){ StringBuffer sb = new StringBuffer(); //添加一个尺寸框 sb.append("量度米尺:"); sb.append("<input text='text' id='onePageMaxNum' name='onePageMaxNum' size='2' value='"+page.getOnePageMaxNum()+"'/>"); sb.append("[ 总发信息 ]: " + page.getMaxNoteNum() + "条 ,当前是:第" + page.getCurrentPage() + " 页 / 共 " + page.getMaxPageNum() + "页 本页 " + page.getCurrentPageNoteNum() + " 条"); //首页,上一页,下一页,尾页 if(page.getCurrentPage()>1) sb.append(" <a onclick='firstPage();' style='cursor:pointer'>首页</a>"); else sb.append("首页"); if(page.getCurrentPage()>1) sb.append(" <a onclick='previousPage();' style='cursor:pointer'>上一页</a>"); else sb.append("上一页"); if(page.getCurrentPage()<page.getMaxPageNum()) sb.append(" <a onclick='nextPage();' style='cursor:pointer'>下一页</a>"); else sb.append("下一页"); if(page.getCurrentPage()<page.getMaxPageNum()) sb.append(" <a onclick='lastPage();' style='cursor:pointer'>尾页</a>"); else sb.append("尾页"); //跳转 sb.append(" 跳转到:<select name='goToPage' onchange='javascript:goPage(this.value)'>"); for (int i = 1; i <= page.getMaxPageNum(); i++) { sb.append("<option value=").append(i); if ( i == page.getCurrentPage()){ sb.append(" selected"); } sb.append(">第").append(i).append("页</option>"); } sb.append("</select>"); return sb.toString(); } //生成js代码 private String getJs(Pageination page){ StringBuffer sb=new StringBuffer(); sb.append("<script language=javascript>"); //跳转事件 sb.append("function goPage(cpage){").append("window.location='").append(action); sb.append("?currentPageNum='+").append("cpage"); sb.append("+'&onePageMaxNum='+").append("getMaxNum()"); sb.append(";}"); //得到分页米尺数值 sb.append("function getMaxNum(){"); sb.append("var val=document.getElementById('onePageMaxNum').value;"); sb.append("if(val=='') return "+measurement+";"); sb.append(" return document.getElementById('onePageMaxNum').value"); sb.append(";}\n"); //首页 sb.append("function firstPage(){"); sb.append("var loca='"+action+"?currentPageNum="+1+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); //上一页 sb.append("function previousPage(){"); sb.append("var loca='"+action+"?currentPageNum="+(page.getCurrentPage()-1)+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}"); //下一页 sb.append("function nextPage(){"); sb.append("var loca='"+action+"?currentPageNum="+(page.getCurrentPage()+1)+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); //尾页 sb.append("function lastPage(){"); sb.append("var loca='"+action+"?currentPageNum="+page.getMaxPageNum()+"&onePageMaxNum='+getMaxNum();"); sb.append("window.location.href=loca;"); sb.append("}\n"); sb.append("</script>"); return sb.toString(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值