亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Web開發設計:DisplayTag應用指南

2019-11-18 12:31:20
字體:
來源:轉載
供稿:網友

  DisplayTag是一個非常好用的表格顯示標簽,適合MVC模式,其主頁在http://displaytag.sourceforge.net
  
  一、最簡單的情況,未使用<display:column/>標簽
  
  <%request.setAttribute( "test", new ReportList(6) );%>
  <display:table name="test" />
  
  標簽遍歷List里的每一個對象,并將對象里的所有屬性顯示出來。一般用于開發的時候檢查對象數據的完整性。
  
  二、使用<display:column/>標簽的情況
  
  <display:table name="test">
  <display:column property="id" title="ID" />
  <display:column property="name" />
  <display:column property="email" />
  <display:column property="status" />
  <display:column property="description" title="Comments"/>
  </display:table>
  
  PRoperty對應List里對象的屬性(用getXXX()方法取得),title則對應表格表頭里的列名。定義列有兩種方式:
  
  A、<display:column property="email" />
  
  使用<display:column/>標簽里的property屬性來定義
  
  B、<display:column title="email">email@it.com</display:column>
  
  在<display:column/>標簽體里增加內容,可以是常量,也可以用其他標簽等等
  
  兩種方式比較,用property屬性來定義更加快速和利于排序。
  
  三、表格顯示樣式的定義
  
  A、在<display:table/>和<display:column/>標簽里指定標準的Html屬性,煩瑣
  
  B、修改樣式表
  <display:table name="test" class="mars">
  <display:column property="id" title="ID" class="idcol"/>
  <display:column property="name" />
  <display:column property="email" />
  <display:column property="status" class="tableCellError" />
  <display:column property="description" title="Comments"/>
  </display:table>
  
  通過class屬性來指定所要應用的樣式??梢栽谄淠J樣式表里(./CSS/screen.css)直接修改
  
  四、標簽取得數據的數據源
  
  有四種范圍
  
  pageScope
  requestScope (默認) <display:table name="test2" >
  sessionScope <display:table name="sessionScope.holder.list" > 注重,這里要指定范圍,非默認
  applicationScope
  
  五、通過增加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" autolink="true" />
  <display:column property="url" autolink="true" />
  </display:table>
  
  假如要顯示的對象里包含email和url地址,則可以在display:column里直接設定autolink="true"來直接連接
  
  八、使用裝飾模式轉換數據顯示(寫自己的 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?id=" + lId
  + "&action=view/">View</a> "
  + "<a href=/"details.jsp?id=" + lId
  + "&action=edit/">Edit</a> "
  + "<a href=/"details.jsp?id=" + lId
  + "&action=delete/">Delete</a>";
  }
  
  十、分頁
  
  實現分頁非常的簡單,增加一個pagesize屬性指定一次想顯示的行數即可
  
  <display:table name="sessionScope.test" pagesize="10">
  <display:column property="id" title="ID" />
  <display:column property="name" />
  <display:column property="email" />
  <display:column property="status" />
  </display:table>
  
  十一、排序
  
  排序實現也是很簡單,在需要排序的column里增加sortable="true"屬性,headerClass="sortable"僅僅是
  
  指定顯示的樣式。column里的屬性對象要實現Comparable接口,假如沒有的話可以應用decorator
  
  defaultsort="1"       默認第一個column排序
  defaultorder="descending"  默認遞減排序
  <display:table name="sessionScope.stest" defaultsort="1" defaultorder="descending">
  <display:column property="id" title="ID" sortable="true" headerClass="sortable" />
  <display:column property="name" sortable="true" headerClass="sortable"/>
  <display:column property="email" />
  <display:column property="status" sortable="true" headerClass="sortable"/>
  </display:table>
  
  注重的是,當同時存在分頁時排序僅僅針對的是當前頁面,而不是整個List都進行排序
  
  十二、column 分組
  
  分組只是需要在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>
  
  十三、導出數據到其他格式(頁面溢出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無效

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区福利视频| 疯狂蹂躏欧美一区二区精品| 久久久久久久av| 国产精自产拍久久久久久蜜| 亚洲精品电影在线| 日韩性生活视频| 国产精品久久久久久久7电影| 国产91免费看片| 亚洲欧洲在线看| 日韩精品视频在线播放| 欧洲亚洲免费视频| 69久久夜色精品国产7777| 日韩在线观看免费网站| 国产精品久久久久福利| 日韩av一区在线观看| 亚洲sss综合天堂久久| 久久国产精品亚洲| 亚洲片国产一区一级在线观看| 国产精品h片在线播放| 久久伊人精品一区二区三区| 97在线免费视频| 成人日韩在线电影| 国产精品国产三级国产专播精品人| 亚洲欧美一区二区激情| 国产精品自产拍在线观看中文| 亚洲人成啪啪网站| 国产一区二区三区直播精品电影| 日韩精品视频免费| 国外视频精品毛片| www.日韩欧美| 成人久久18免费网站图片| 欧美日韩亚洲一区二| 亚洲第一精品久久忘忧草社区| 美乳少妇欧美精品| 奇米成人av国产一区二区三区| 成人黄色免费网站在线观看| 日本欧美一级片| yw.139尤物在线精品视频| 日韩大片免费观看视频播放| 日韩欧美精品网站| 欧美福利视频在线观看| 久久久国产视频| 国产精品免费网站| 亚洲午夜色婷婷在线| 欧美激情手机在线视频| 久久97久久97精品免视看| 国产精品久久97| 精品综合久久久久久97| 亚洲美女精品成人在线视频| 九九久久久久久久久激情| 欧美体内谢she精2性欧美| 日韩av免费在线观看| 国产精品第七十二页| 国产精品一区二区三区在线播放| 日韩少妇与小伙激情| 亚洲国产精品成人精品| 久久手机免费视频| 性视频1819p久久| 欧美性xxxx在线播放| 久久91精品国产91久久跳| 国产精品久久久久久久久影视| 欧美亚洲第一页| 日韩一区二区欧美| 久久久久国色av免费观看性色| 国产999在线观看| 国产精品99久久99久久久二8| 欧美一区二区三区四区在线| 日韩欧美国产一区二区| 日本成人黄色片| 日韩高清中文字幕| 日本亚洲精品在线观看| 尤物九九久久国产精品的特点| 日韩高清电影好看的电视剧电影| 高清一区二区三区四区五区| 伊人久久精品视频| 欧美日韩爱爱视频| 九九综合九九综合| 国产一区二区美女视频| 亚洲999一在线观看www| 亚洲精品资源在线| 久久久久久久久久久亚洲| 国语自产精品视频在线看抢先版图片| 欧美一区三区三区高中清蜜桃| 亚洲欧美国产一本综合首页| 亚洲欧美第一页| 在线电影欧美日韩一区二区私密| 国产91在线播放九色快色| 久久久精品在线观看| 国产精品自拍小视频| 在线视频欧美性高潮| 日韩在线视频免费观看| 久久午夜a级毛片| 欧美性猛交xxxx久久久| 亚洲天堂男人天堂| 久久久久久12| 欧美最猛性xxxxx(亚洲精品)| 亲子乱一区二区三区电影| 亚洲精品日韩av| 97精品视频在线观看| 国产成人涩涩涩视频在线观看| 热re99久久精品国产66热| 欧洲成人性视频| 97超视频免费观看| 91高清视频免费观看| 国产在线98福利播放视频| 欧美日韩国产成人高清视频| 欧美一区二区三区艳史| 久热精品在线视频| 成人激情视频网| 欧美亚洲第一页| 亚洲精品之草原avav久久| 欧美亚洲国产日本| 一区二区在线视频| 日韩人体视频一二区| 国产精品免费视频xxxx| 精品国产精品三级精品av网址| 亚洲精品电影网站| 亚洲影院色无极综合| 国产精品久久久久7777婷婷| 亚洲男人天堂古典| 亚洲天堂av电影| 久久久国产精品免费| 久久影视电视剧免费网站| 日韩hd视频在线观看| www.xxxx欧美| 午夜精品久久久久久久99热| 国产日韩在线观看av| 欧美激情精品久久久| 色av中文字幕一区| 欧美国产高跟鞋裸体秀xxxhd| 88国产精品欧美一区二区三区| 日韩av在线直播| 久久影院模特热| 久久国产精品电影| 日韩精品在线免费播放| 欧美二区在线播放| 欧美日韩第一视频| 欧美重口另类videos人妖| 992tv在线成人免费观看| 视频一区视频二区国产精品| 草民午夜欧美限制a级福利片| 日韩精品欧美国产精品忘忧草| 亚洲男人天堂网| 26uuu久久噜噜噜噜| 中文字幕亚洲欧美在线| 在线日韩欧美视频| 久久久久亚洲精品| 欧美成人一二三| 欧美激情视频网址| 亚洲国产古装精品网站| 欧美在线不卡区| 成人在线精品视频| 97超碰蝌蚪网人人做人人爽| 亚洲欧美日韩精品久久亚洲区| 亚洲精品狠狠操| 国产精品羞羞答答| 国产欧美日韩综合精品| 国内精品一区二区三区四区| 色综合男人天堂| 高清在线视频日韩欧美| 在线中文字幕日韩| 国产精品极品尤物在线观看| 91精品久久久久久久久久入口| 日韩电影大片中文字幕|