Displaytag用法整理一 1,、 Displaytag提供的默認(rèn)的系統(tǒng)提示均為英文,,有兩種方法進(jìn)行漢化: 1),、將displaytag-1.1.1.jar中自帶的org/display/properties/displaytag.properties 文件拷貝到項目的classes目錄下 用java提供的native2ascii工具將文件進(jìn)行漢化,漢化后的內(nèi)容重新保存為displaytag.properties文件 2),、將jar包中的displaytag.properties漢化后替換jar包中原來的文件 2,、 <display:column property="email" /> //property指定了列表中包含的bean(actionForm或vo)中包含的屬性的名稱,大小寫必須一致 <display:column title="email">[email protected]</display:column> //列表中指定任意的列,,不包含在bean中,,比如顯示按鈕、圖片等 3,、 先來給出第一個具體的例子(實現(xiàn)列包裝:顯示一列checkbox,,點擊標(biāo)題欄的checkbox完成全選): <display:column style="width:5%;text-align:center" headerClass="dataHead" property="columnId" title="<input type=‘checkbox‘ name=‘checkall‘ value=‘a(chǎn)ll‘ onclick=‘checkAll();‘ />" decorator="ainx.asiainfo.common.displaytag.CheckboxColumnWrapper" /> 從該例可以看出: 1)、title屬性定義了一個checkbox,,點擊后執(zhí)行javascript函數(shù)checkAll()完成對checkbox的全選,,該checkbox顯示在該列的標(biāo)題欄中 2)、headerClass屬性指定了標(biāo)題欄的css樣式,,dataHead是已經(jīng)在css文件中定義了的 3),、property屬性指定該列將要顯示bean中的哪個變量的內(nèi)容,大小寫必須與bean中的定義一致 4)、各行都用了一個decorator將數(shù)據(jù)進(jìn)行了包裝,,由ainx.asiainfo.common.displaytag.CheckboxColumnWrapper類實現(xiàn)了對該列數(shù)據(jù)的包裝,,該類具體內(nèi)容如下: package ainx.asiainfo.common.displaytag; import javax.servlet.jsp.PageContext; import org.displaytag.decorator.DisplaytagColumnDecorator; import org.displaytag.exception.DecoratorException; import org.displaytag.properties.MediaTypeEnum; /** * 用于豐富displaytag列顯示的功能,在表格中顯示一列checkbox * @author lvping */ public class CheckboxColumnWrapper implements DisplaytagColumnDecorator { /** * 該列全部顯示為checkbox,,其value為該列帶有的ID */ public Object decorate(Object arg0, PageContext arg1, MediaTypeEnum arg2) throws DecoratorException { //arg0表示被包裝的該列定義的property屬性給定的值 //arg1表示pagecontext //arg2表示…… String elementid = (String) arg0; return "<input name=\"selected\" type=\"checkbox\" value=\""+elementid+"\" />"; //同理如果對于該列要顯示為一個圖片,,可以返回”<input type=’image’ src=’…’ />” } } 4、 再給出第二個例子(前臺分頁+排序+分組功能): <display:table class="data" cellpadding="0" sort="list" requestURI="/NetXpert/room/idcRoomAreaAction.do?actionType=doListIdcArea" pagesize="20" cellspacing="0" style="width:98%" name="areas"> <display:column property="roomname" sortable="true" group="1" title="所在機(jī)房"/> </display:table> 從該例看出: 1),、table中的name屬性指定了該表格的數(shù)據(jù)來自request的attribute中名稱為"areas"的數(shù)據(jù)(即action中必須有如下的代碼: ArrayList alAreas = ……; //此處獲取將要在列表中顯示的數(shù)據(jù) request.setAttribute("areas",alAreas);) 1),、table中的pagesize設(shè)定了表格中每頁顯示的記錄個數(shù) 2)、table中的requestURI屬性定義了每次分頁時需要提交的請求 3),、table中的sort屬性設(shè)為list,,表示點擊表中某列排序時可對整個表格排序 (Use ‘page‘ if you want to sort only visible records, or ‘list‘ if you want to sort the full list, or ‘external‘ if the data is sorted outside displaytag) 4)、sortable屬性設(shè)為true,,則表示對該列支持排序(前臺排序),,顯示出的該列的標(biāo)題上會自動帶有下劃線,點擊可排序 5),、group屬性的設(shè)置表示對該列的數(shù)據(jù)自動分組,,設(shè)為1表示該列數(shù)據(jù)為顯示出的第一個分組 Displaytag用法整理二1、 再給第三個例子(后臺數(shù)據(jù)庫分頁) <display:table class="data" cellpadding="0" requestURI="/NetXpert/room/idcRoomShelfAction.do?actionType=doListIdcShelf" cellspacing="0" style="width:98%" name="shelfs" > …… …… </display:table> 從該例中可看出: 1),、table只設(shè)置了requestURI屬性,,沒有設(shè)置pagesize屬性,由requestURI指定的url來完成分頁功能 2),、IdcRoomShelfAction.java中的相關(guān)函數(shù)的代碼(紅色部分的代碼完成了分頁): public ActionForward doListIdcShelf(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { int page = 1; // 默認(rèn)值:第1頁 PaginatedListHelper paginaredList = new PaginatedListHelper(); // 獲取頁號 if (request.getParameter("page") != null && !"".equals(request.getParameter("page"))) { page = Integer.parseInt(request.getParameter("page")); } paginaredList.setObjectsPerPage(20); // 默認(rèn)每頁顯示15條記錄,,可以重新賦值 paginaredList.setPageNumber(page); // 設(shè)置頁號 ArrayList voList = new IdcRoomShelfBo().selectShelf(); ArrayList formList = ((IdcRoomShelfForm) form) .getFormListFromVOList(voList); paginaredList.setFullListSize(formList.size()); // 記錄總數(shù) paginaredList.setList(formList); // 全部的數(shù)據(jù)集 paginaredList.getCurrentPageRecord(); // 獲取當(dāng)前頁號需要的數(shù)據(jù)集 request.setAttribute("shelfs", paginaredList); return mapping.findForward("shelfList"); } 3)、分頁類的代碼:(display1.1的發(fā)布已經(jīng)能夠支持后臺數(shù)據(jù)庫分頁,,但必須實現(xiàn)其提供的PaginatedList接口) package com.asiainfo.idc.room.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; //PaginatedList和SortOrderEnum為displaytag-1.1.1.jar提供的jar包中提供的類 import org.displaytag.pagination.PaginatedList; import org.displaytag.properties.SortOrderEnum; /** * 針對displaytag標(biāo)簽擴(kuò)展的后臺分頁功能 * @author lvping */ public class PaginatedListHelper implements PaginatedList { private List list; // 數(shù)據(jù)集 private int pageNumber = 1;// 頁號 private int objectsPerPage = 15;// 每頁顯示的記錄數(shù) private int fullListSize = 0;// 全部記錄數(shù) private String sortCriterion; private SortOrderEnum sortDirection; private String searchId; public List getList() { return list; } public void setList(List list) { this.list = list; } public int getPageNumber() { return pageNumber; } public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; } public int getObjectsPerPage() { return objectsPerPage; } public void setObjectsPerPage(int objectsPerPage) { this.objectsPerPage = objectsPerPage; } public int getFullListSize() { return fullListSize; } public void setFullListSize(int fullListSize) { this.fullListSize = fullListSize; } public String getSortCriterion() { return sortCriterion; } public void setSortCriterion(String sortCriterion) { this.sortCriterion = sortCriterion; } public SortOrderEnum getSortDirection() { return sortDirection; } public void setSortDirection(SortOrderEnum sortDirection) { this.sortDirection = sortDirection; } public String getSearchId() { return searchId; } public void setSearchId(String searchId) { this.searchId = searchId; } /** * 根據(jù)總的數(shù)據(jù)集和每頁需要的首記錄,、尾記錄索引,從總記錄集中得到需要的記錄集 * 這是一個取巧的分頁方法,,并非真正的根據(jù)每頁請求拼sql進(jìn)行查詢,,而是對于整個數(shù)據(jù)查詢的結(jié)果從中取各頁需要的數(shù)據(jù)集合,對于超大數(shù)據(jù)量的查詢效率可能不會太高 */ public void getCurrentPageRecord() { ArrayList v = new ArrayList(); Iterator iterator = null; try { if (this.getList() != null) { iterator = this.getList().iterator(); int i = 0; int fromRow = 0; int toRow = 0; if (this.getPageNumber() == 1) { // 首頁 fromRow = 1; // 從第一行開始 toRow = this.getObjectsPerPage(); } else { fromRow = (this.getPageNumber() - 1) * this.getObjectsPerPage() + 1; toRow = fromRow + this.getObjectsPerPage(); } if (toRow > this.getFullListSize()) // 如果尾行數(shù)超過list的大小 toRow = this.getFullListSize(); while (iterator.hasNext()) { i++; if (i < fromRow) { iterator.next(); continue; } else if (i > toRow) { iterator.next(); continue; } else { v.add(iterator.next()); } } this.setList(v); } } catch (Exception ex) { ex.printStackTrace(); } } }
Displaytag用法整理三1,、 再來一個(列中的超鏈接): <display:column style="width:10%;text-align:center" headerClass="dataHead" property="shelfcode" href="/NetXpert/room/idcRoomShelfAction.do?actionType=doEditIdcShelf&" paramId="shelfid" paramProperty="shelfid" title="機(jī)柜編碼" /> 從該例中看到: 1),、列的href屬性定義了點擊超鏈接后請求的url 2)、列的paramId屬性定義了url后面帶有的參數(shù)的名稱 3),、列的paramProperty屬性定義了url給出的參數(shù)值 4),、根據(jù)該列的定義,點擊該列數(shù)據(jù)的超鏈接后,,會跳轉(zhuǎn)至如下的url: /NetXpert/room/idcRoomShelfAction.do?actionType=doEditIdcShelf&shelfid=XXX (XXX為property屬性指定的bean中的shelfcode的值) |
|