ECSIDE標籤之<ec:table>標籤的屬性說明與使用 html
EC side是基於jsp tag的開源列表組件,能夠幫助咱們快速實現牆大的列表的jsp標籤。EC side能夠展示列表(分頁)、排序、過濾。java
<ec:table></ec:table>中的屬性說明ajax
◆ 屬性: tableId 描述:
設置列表的惟一標識,默認爲"ec",當一個頁面內有多個ECSIDE列表時,必須爲每一個列表指定不一樣的tableId. sql
◆ 屬性: items 描述: 設置要展示的數據對應的集合在內存中存放時使用的名字,也就是request.setAttribute("recordList", list);數據庫
◆ 屬性: var 描述:
設置指向數據迭代中的當前記錄所對應的bean(是JavaBean)的變量的名稱session
◆ 屬性: action 描述:
列表執行翻頁 過濾 排序等操做時所要提交的action app
◆ 屬性: insertAction 描述:
可編輯列表時,插入數據所要提交的actionjsp
◆ 屬性: updateAction 描述:
可編輯列表時,更新數據所要提交的actionide
◆ 屬性: deleteAction 描述:
可編輯列表時,刪除數據所要提交的action工具
◆ 屬性: shadowRowAction 描述:
顯示shadowRow時所要提交的action
◆ 屬性: theme 描述:
設置列表的風格所使用的主題. 默認爲ecside.
◆ 屬性: generateScript 描述:
是否自動生成ECSide所需的js腳本. 可選 true/false ( 默認:true )
◆ 屬性: useAjax 描述:
是否使用ajax技術進行翻頁、過濾、排序等操做. 可選 true/false ( 默認:true )
◆ 屬性: doPreload 描述:
是否使用預讀取技術. 可選 true/false ( 默認:true )
◆ 屬性: classic 描述:
是否使用傳統的簡單列表. 可選 true/false ( 默認:false )
◆ 屬性: autoIncludeParameters 描述:
是否開啓"自動保留"特性.翻頁 過濾 排序時當前頁的表單域將以hidden input的形式被保留(傳遞到新頁面). 可選 true/false ( 默認:true ) 關於此項的更多說明可參見原版ec手冊
◆ 屬性: includeParameters 描述:
在關閉"自動保留"時,但願被自動保留的表單域的標示,支持多個,用","分割
◆ 屬性: excludeParameters 描述:
在開啓"自動保留"時,但願不被自動保留的表單域的標示,支持多個,用","分割 補充: 若是理解了 autoIncludeParameters 的用處 就不難理解以上兩個屬性的用處了 注意: excludeParameters 比 includeParameters 有更高的優先級 即 excludeParameters="a" includeParameters ="a" 時 a仍然將被排除,建議儘可能使用 excludeParameters 不要使用 includeParameters ,除非你很是明確本身要包含的東西。 includeParameters 使用不當會使你忘記包含一些必須包含的東西. excludeParameters="表單屬性名稱1,表單屬性名稱2" (表單屬性名稱不能含有半角的逗號) includeParameters="表單屬性名稱3,表單屬性名稱4"
◆ 屬性: toolbarContent 描述:
設置工具條要顯示的內容,以及各個元素的先後位置. 默認狀態是 toolbarContent="navigation|pagejump |pagesize|refresh save add del|export|extend|status"
例子 toolbarContent="pagejump|navigation|export|extend|status" 此時 工具條將不顯示"頁面行數調整"框和"刷新 保存 增刪按鈕" 同時順序也會和默認的發生變化navigation 導航條 pagejump 頁面跳轉 pagesize 頁面行數設置 refresh 刷新當前頁 save 保存列表記錄 add 添加記錄 del 刪除記錄 export 導出按鈕區 extend 自定義擴展區 status 數據信息區
◆ 屬性: toolbarLocation 描述:
設置工具條要顯示的位置(列表的上面仍是下面). 可選top/bottom/none, 默認top.
◆ 屬性: paginationLocation 描述:
同toolbarLocation.
◆ 屬性: rowsDisplayed 描述:
設置每頁顯示的默認記錄條數.
◆ 屬性: pageSizeList 描述:
設置調整"每頁記錄數"的下拉框內的候選值. 例如: pageSizeList="10,20,50,100,1000,2000,all" 其中的all爲增長所有顯示功能。 例子 pageSizeList="10,20,50"
此時列表裏將只顯示 10 20 50供選擇 max:數字 特性 : pageSizeList="max:200,10,15,30,50,100,all" 若是 10--100以及all中,某一項大過了max的200則 不在列表中顯示。
也能夠只使用pageSizeList="max:200" 此時將 使用默認設置,並用max限制。
◆ 屬性: nearPageNum 描述:
設置"鄰近頁導航"的先後區間範圍
◆ 屬性: maxRowsExported 描述:
設置導出和打印操做所容許的最大記錄條數
◆ 屬性: resizeColWidth 描述:
是否容許調整列寬. 可選 true/false ( 默認:true )
◆ 屬性: minColWidth 描述:
設置調整列寬時,任意一列所容許的最小寬度
◆ 屬性: height 描述:
設置列表的高度.
◆ 屬性: minHeight 描述:
設置列表的最小高度
◆ 屬性: xlsFileName 描述:
設置導出xls的文件的文件名. 不指定時爲不容許導出xls文件
◆ 屬性: pdfFileName 描述:
設置導出pdf的文件的文件名. 不指定時爲不容許導出pdf文件
◆ 屬性: csvFileName 描述:
設置導出csv的文件的文件名. 不指定時爲不容許導出csv文件
◆ 屬性: showPrint 描述:
是否顯示打印按鈕. true/false.
◆ 屬性: editable 描述:
是否開啓可編輯列表功能.
◆ 屬性: sortable 描述:
是否容許對列表進行按列排序
◆ 屬性: filterable 描述:
是否開啓過濾功能.
◆ 屬性: title 描述:
設置列表的標題,該標題將顯示在列表的上方.
◆ 屬性: showTitle 描述:
是否顯示列表的title.
◆ 屬性: style 描述:
設置列表的table的style,至關於html裏的style.
◆ 屬性: styleClass 描述:
設置列表的table的style class,至關於html裏的class.
◆ 屬性: locale 描述:
設置列表的本地化信息. 例如 fr_FR 將使列表使用法文方式顯示(前提是已經正確提供相關資源文件).
◆ 屬性: interceptor 描述:
自定義列表攔截器.值爲對應的攔截器的實現. 該攔截器可用來添加或修改列表的屬性
◆ 屬性: retrieveRowsCallback 描述:
指定列表所使用的分頁機制.值能夠是自定義的完整的callback類名,也能夠是在properties文件內指定的簡稱
◆ 屬性: filterRowsCallback 描述:
指定列表所使用的過濾機制.值能夠是自定義的完整的callback類名,也能夠是在properties文件內指定的簡稱
◆ 屬性: sortRowsCallback 描述:
指定列表所使用的排序機制.值能夠是自定義的完整的callback類名,也能夠是在properties文件內指定的簡稱 關於以上三個屬性的使用請見"ECSide列表的RowsCallback機制"文檔.
◆ 屬性: width 描述:
指定列表的寬度.至關於<table>的width屬性
◆ 屬性: listWidth 描述:
Specify the location of pagination bar . Acceptable values are up or down.
◆ 屬性: listHeight 描述:
Specify the location of pagination bar . Acceptable values are up or down.
◆ 屬性: height 描述:
指定列表的高度.至關於<table>的height屬性.當值爲"auto"時,列表高度將隨着列表內容自動調整. 只有在非classic模式下才有效.
◆ 屬性: excludeTool 描述:
Specify whether or not to show the rows displayed bar . Acceptable values are "true" or "false".
◆ 屬性: showHeader 描述:
是否顯示列表表頭
<ec:row></ec:row>中的屬性說明
◆ 屬性: rowId 描述:
列表的行的id,對應<tr>的id屬性.
◆ 屬性: recordKey 描述:
行所對應的記錄的惟一主鍵值,主要用於gird列表的刪改
◆ 屬性: highlightRow 描述:
鼠標通過某行時,該行是否變色.
◆ 屬性: selectlightRow 描述:
鼠標點擊某行時,該行是否變色.
◆ 屬性: interceptor 描述:
自定義行攔截器.值爲對應的攔截器的實現. 該攔截器可用來添加或修改行的屬性
◆ 屬性: ondblclick 描述:
定義鼠標雙擊事件.至關於<tr>的ondblclick事件
◆ 屬性: onclick 描述:
定義鼠標的單擊事件.至關於<tr>的onclick事件
◆ 屬性: onmouseout 描述:
定義鼠標的onmouseout事件.至關於<tr>的onmouseout事件
◆ 屬性: onmouseover 描述:
定義鼠標的onmouseover事件.至關於<tr>的onmouseover事件
◆ 屬性: style 描述:
至關於<tr>的style.
◆ 屬性: styleClass 描述:
至關於<tr>的class. <ec:extend>標籤 具體的內容能夠是任何合法的HTML代碼
◆ 屬性: location 描述:
在什麼位置添加擴展內容. top: 列表上方(在列表外部) bottom: 列表下方(在列表外部) 留空: 工具條的 extend擴展區<ec:extendrow>標籤 擴展一行.具體的內容能夠是任何合法的<tr>相關的HTML代碼
◆ 屬性: location 描述:
在什麼位置添加擴展內容. bottom: 列表內部的下方,和列表內容主體在一個<table>內 留空: 同上
<ec: column></ec: column >中的屬性
◆ 屬性: columnId 描述:
單元格的id,至關於<td>的id屬性
◆ 屬性: title 描述:
列在列表表頭裏顯示的名稱.
◆ 屬性: property 描述:
指定該列所對應的列表bean<是JavaBean>(map)的屬性(key).
◆ 屬性: alias 描述:
列的別名.
◆ 屬性: value 描述:
列的數值.默認爲當前行當前列對應的列表bean<仍是JavaBean>(map)的屬性的值.
◆ 屬性: viewsAllowed 描述:
指定當前列將在那些視圖中被顯示,可選項爲:html xls csv pdf print 分別對應於頁面展示,導出,打印
◆ 屬性: viewsDenied 描述:
指定當前列將在那些視圖中被隱藏,可選項爲:html xls csv pdf print 分別對應於頁面展示,導出,打印
◆ 屬性: tipTitle 描述:
單元格的提示信息,,至關於<td>的title屬性
◆ 屬性: group 描述:
是否對當前列進行編組. true/false.
◆ 屬性: resizeColWidth 描述:
是否容許調整該列的列寬 table爲classic時無效
◆ 屬性: minWidth 描述:
容許調整列寬時,該列所容許的最小寬度,單位像素.
◆ 屬性: sortable 描述:
是否容許對該列進行排序.
◆ 屬性: filterable 描述:
是否容許對該列進行過濾操做.
◆ 屬性: editable 描述:
單元格是否容許編輯.
◆ 屬性: cellValue 描述:
單元格對應的值,詳見"ECSide可編輯列表的使用指南"
◆ 屬性: editTemplate 描述:
編輯時,所使用的模板名稱,詳見"ECSide可編輯列表的使用指南"
◆ 屬性: editEvent 描述:
進入編輯轉檯所使用的頁面事件,默認爲雙擊,詳見"ECSide可編輯列表的使用指南"
◆ 屬性: mappingItem 描述:
實現單元格的值,與顯示的內容的映射.mappingItem的值爲進行映射所使用的map在內存中存放的名稱
◆ 屬性: calc 描述:
指定列所使用的統計方式.值能夠是自定義的完整的calc類名,也能夠是在properties文件內指定的簡稱,多個之間用","分割. 自帶的統計有兩種total(求和)與average(求平均值).
◆ 屬性: calcTitle 描述:
指定列所使用的統計方式所對應的統計名稱,例如合計,平均等等.多個之間用","分割.
◆ 屬性: calcSpan 描述:
統計行的統計名稱單元格所佔用的列數.至關於<td>的colspan屬性
◆ 屬性: cell 描述:
指定列表內該列所使用的cell的實現類.值能夠是自定義的完整的cell類名,也能夠是在properties文件內指定的簡稱
◆ 屬性: interceptor 描述:
自定義列攔截器.值爲對應的攔截器的實現. 該攔截器可用來添加或修改列的屬性
◆ 屬性: escapeAutoFormat 描述:
是否不進行自動格式的轉換.
◆ 屬性: format 描述:
The format to use for the cell. For instance if used with a date cell then the format can be MM/dd/yyyy.
◆ 屬性: parse 描述:
Used if the format needs to be interpreted. For instance, a date needs to be parsed in the specific format, such as MM-dd-yyyy.
◆ 屬性: ondblclick 描述:
定義鼠標雙擊事件.至關於<td>的ondblclick事件
◆ 屬性: onclick 描述:
定義鼠標的單擊事件.至關於<td>的onclick事件
◆ 屬性: onmouseout 描述:
定義鼠標的onmouseout事件.至關於<td>的onmouseout事件
◆ 屬性: onmouseover 描述:
定義鼠標的onmouseover事件.至關於<td>的onmouseover事件
◆ 屬性: style 描述:
至關於<td>的style.
◆ 屬性: styleClass 描述:
至關於<td>的class.
◆ 屬性: width 描述:
設置列的寬度.至關於<td>的width屬性
◆ 屬性: nowrap 描述:
設置列的寬度.至關於<td>的nowrap屬性
//默認每頁顯示的記錄條數 protected static int DEFAULT_PAGE_SIZE = 20; // 數據庫端分頁,適合數據量較大的狀況 public ActionForward doQuery(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserInfoDAO userInfoDAO=(UserInfoDAO)getBean("userInfoDAO"); // 當列表的分頁 過濾 排序等操做是基於數據庫時,必需要用到Limit對象. // 注意,當頁面有多個ec的時候,須要使用帶 tableId參數的同名方法. //Limit limit=RequestUtils.getLimit(request,"ecGird的Id"); Limit limit=RequestUtils.getLimit(request); // 基於數據庫的排序. // ECSide會幫助開發人員取得排序的相關信息:當前是按哪一個(目前只支持單列排序)column排序的,以及排序的方式desc或asc, // 這個信息以key-value方式存放在map裏. // 可是至於若是處理這些信息(如組裝成sql語句),則是由開發人員本身在DAO裏完成的. Sort sort=limit.getSort(); Map sortValueMap = sort.getSortValueMap(); // 基於數據庫過濾. // ECSide會幫助開發人員取得過濾的相關信息:當前是對哪些column進行過濾,以及過濾的內容是什麼,這個信息以key-value方式存放在map裏. // 可是至於若是處理這些信息(如組裝成sql語句),則是由開發人員本身在DAO裏完成的. FilterSet filterSet =limit.getFilterSet(); Map filterPropertyMap=filterSet.getPropertyValueMap(); // 在本例中, sort 和 filter 相關信息將被傳入 DAO,用於拼裝sql語句. // 其實,此時的排序 過濾就和咱們之前的傳統的查詢很是相似:從查詢頁面取得查詢條件,傳入DAO. // RequestUtils.getTotalRowsFromRequest(request);是一個工具類,用來從ECSIDE的列表中取得上次計算出的總行數 // 若是您不但願每次翻頁都從新計算總行數,那麼建議參考下面幾行代碼的作法. int totalRows = RequestUtils.getTotalRowsFromRequest(request); if (totalRows < 0) { // TODO : userInfoDAO.getUserInfoNumber()爲可以取得總行數的方法,請替換爲實際的實現。 // 取得記錄總條數時,不要忘了把filter做爲參數傳入,由於要取得的總行數也是要接受條件限制的. totalRows = userInfoDAO.getUserInfoNumber(filterPropertyMap); } // DEFAULT_PAGE_SIZE ==0 時, 每頁記錄數會使用 properties文件內的默認設置 // DEFAULT_PAGE_SIZE <0 時, 每頁記錄數會等於所有記錄數 limit.setRowAttributes(totalRows, DEFAULT_PAGE_SIZE); //取得當前要查詢的頁面的記錄起止行號 // offset表示數據編號的起始號. ORACLE數據庫通常是從1開始的,HSQLDB是從0開始,默認是從0開始計數,在這裏咱們使用從0開始. int offset=0; int[] rowStartEnd =new int[] { limit.getRowStart() + offset, limit.getRowEnd() + offset }; // TODO : userInfoDAO.getSomeUserInfo(rowStartEnd[0], rowStartEnd[1]) // 爲查詢記錄的方法,請替換爲實際的實現。rowStartEnd[0], rowStartEnd[1]爲起止行 // rowStartEnd[0], rowStartEnd[1] 左閉 右開 List rslist = userInfoDAO.getSomeUserInfo(rowStartEnd[0], rowStartEnd[1],sortValueMap,filterPropertyMap); request.setAttribute("recordList", rslist); // 字典數據. 一個Map,存放的是 "編號" 到 "顯示的文字" 的映射 request.setAttribute("GENDER_MAP", CommonDictionary.GENDER); request.setAttribute("USERROLE_MAP", CommonDictionary.USERROLE); return mapping.findForward("listPage"); }
public List getSomeUserInfo(int startRow,int endRow,Map sortValueMap,Map filterPropertyMap){ StringBuffer bufSql = new StringBuffer(); int size=endRow-startRow; // 使用傳統JDBC時,根據不一樣條件拼裝不一樣的SQL一貫是很是惱人的事情. // ECSide固然不可以幫助您解決這個問題. // 再次重申一遍,當翻頁 過濾 排序 均基於數據庫時,ECSide只是可以幫助開發者在後臺更方便的取得操做相關的數據. // 而如何使用他們,仍然須要開發人員本身來決定. bufSql.append("SELECT * FROM "); StringBuffer whereSql = new StringBuffer(" WHERE 1=1 "); if (filterPropertyMap!=null && !filterPropertyMap.isEmpty()){ // 根據過濾條件進行sql語句的拼裝. // 在本例中,只有 USERROLE USERNAME GENDER 是能夠進行過濾的. // 在這裏偷下懶,就不用 PreparedStatement 的方式了,而是直接把過濾項拼裝進sql語句內. String filterProperty; String filterValue; filterProperty="USERROLE"; filterValue=(String)filterPropertyMap.get(filterProperty); if (filterValue!=null){ whereSql.append(" AND ").append(filterProperty).append(" = '").append(StringEscapeUtils.escapeSql(filterValue)).append("' "); } filterProperty="USERNAME"; filterValue=(String)filterPropertyMap.get(filterProperty); if (filterValue!=null){ whereSql.append(" AND ").append(filterProperty).append(" like '").append(StringEscapeUtils.escapeSql(filterValue)).append("' "); } filterProperty="GENDER"; filterValue=(String)filterPropertyMap.get(filterProperty); if (filterValue!=null){ whereSql.append(" AND ").append(filterProperty).append(" = '").append(StringEscapeUtils.escapeSql(filterValue)).append("' "); } } if (sortValueMap!=null && !sortValueMap.isEmpty()){ bufSql.append("( SELECT * FROM USER_INFO "); bufSql.append(whereSql); bufSql.append(ECSideUtils.getDefaultSortSQL(sortValueMap)); bufSql.append(" ) "); }else{ bufSql.append(" USER_INFO "); bufSql.append(whereSql); } bufSql.append(" LIMIT ? OFFSET ?"); Connection conn=null; PreparedStatement pstmt = null; ResultSet rest = null; List userList=null; try { conn = getConnection(); pstmt = ConnectionUtils.prepareStatement(conn,bufSql.toString()); int prarameterIndex=0; pstmt.setInt(++prarameterIndex, size); pstmt.setInt(++prarameterIndex, startRow); rest = pstmt.executeQuery(); String[] columnName=getColumnName(rest); userList=new ArrayList(); Map userInfo=null; while (rest.next()) { userInfo=new HashMap(); buildRecord(rest,columnName,userInfo); userList.add(userInfo); } } catch (Exception e) { LogHandler.errorLog(logger, e); userList=null; }finally{ close(rest, pstmt, conn); } return userList; }