posts - 297,  comments - 1618,  trackbacks - 0

               本文請勿轉載!
               文中圖片沒有貼,有興趣的朋友可從如下網址下載:
               Download

          1. 簡介

          eXtremeComponents(簡稱ec)是一系列提供高級顯示的開源JSP定制標簽,當前的包含的組件為eXtremeTable,用于以表形式顯示數據。

          使用ec需要一定的前提條件,JDK要求1.3或更高的版本,Servlet需要2.3或以上版本。

          eXtremeTable在給定的servlet范圍(scope)外取得BeansMaps的集合用于JSP頁面顯示。 servelet范圍的搜索順序是:page, request, sessionapplication。通過設定TableTageitems 屬性,eXtremeTable知道哪些需要在servlet范圍外被保持。

          集合里的Beanspojo,如果使用maps那么它就是鍵值對。你可以認為每一個bean就是表中的一行數據。 在接下來的文檔中,我將使用Beans集合來代替這兩種集合。

          2. 下載與配置

          2.1 下載

                 首頁:http://www.extremecomponents.org

                 下載地址:

          http://sourceforge.net/project/showfiles.php?group_id=108168&package_id=116800

                 下載界面如圖1所示:

          1 ec的下載界面

                 當前ec的最新版為1.0.1正式版。其中eXtremeComponents-1.0.1.zip為不帶依賴包的壓縮包,其中包含ec發布的jar、jstldcss文件,還包括其源碼。其目錄結構如圖2所示:

          2 eXtremeComponents-1.0.1.zip的目錄結構      3 dependencies壓縮包的目錄結構

                 eXtremeComponents-1.0.1-with-dependencies.zip除了包含eXtremeComponents-1.0.1.zip的內容外,還包含一個lib目錄,用來存放依賴的jar包。lib下的minimum目錄為最小的jar要求,如下所示:

          l         commons-beanutils-1.7.0.jar

          l         commons-collections-3.0.jar

          l         commons-lang-2.0.jar

          l         commons-logging-1.0.4.jar

          l         standard-1.0.2.jar

          lib下的pdf目錄為需要使用PDF導出功能時需要另外添加的jar包,如下所示:

          l         avalon-framework-4.0.jar

          l         batik-1.5-fop-0.20-5.jar

          l         fop-0.20.5.jar

          l         xalan-2.5.1.jar

          l         xercesImpl-2.6.1.jar

          l         xml-apis-2.0.2.jar

          lib下的xls目錄為需要使用XLS導出功能時需要添加的jar包,該目錄下只有一個jar包,即:poi-2.5.1.jar。

          2.2 配置

          要在Web項目中使用ec來進行分頁,需要做一些準備工作。

          建立名為extremecomponentsWeb工程后,第一步需要dist目錄下的ecjar包:extremecomponents-1.0.1.jar拷貝到Web工程的WebRoot/WEB-INF/lib目錄,并將相關的依賴包也拷貝到該目錄。

          接著在WebRoot/WEB-INF目錄下建立tld目錄來存放tld文件,并將ectld文件extremecomponents.tld(在dist目錄下)拷貝到WEB-INF/tld目錄。

          下一步是在WebRoot目錄下建立styles目錄,用來存放css樣式表文件,并將并將eccss文件extremecomponents.css(在dist目錄下)拷貝到WEB-INF/styles目錄。

          下一步是在WebRoot目錄下建立js目錄,用來存放js文件,并將并將ecjs文件extremecomponents.js(在dist目錄下)拷貝到WEB-INF/js目錄。

          最后是拷貝圖片,將images(該目錄包括了ec所需的全部圖片)整個目錄拷貝到WebRoot目錄下即可。

          3. 使用舉例

          3.1 初級篇

          3.1.1最簡語句實例

                 本例講解ec進行分頁的一個最簡單的例子,在該例子中,顯示一個用戶列表,用戶列表中有若干User對象,每個User對象有loginName(用戶名)、name(姓名)、mobile(手機號)、address(地址)、emailEmail)這五個屬性。

                 首先讀者需要在extremecomponents工程中引入Struts1.2。讀者可以在MyEclipse中選中該工程后,點擊右鍵選擇“MyEclipse->Add Struts Capabilities…”,彈出新建對話框,如圖4所示:

          4   為工程導入Struts1.2的對話框

                 在“Struts specification”中選擇“Struts 1.2,在“Base poackage for new classes”中不輸入內容,使得資源文件放置src目錄下。點擊圖4的“Finish”按鈕完成Struts1.2的導入。

                 為了減少例子的復雜性,本文中數據的獲取在程序中構造,并不從數據庫中獲取。Java類放在com.amigo包下。接下來講述一下本實例的代碼:

          3.1.1.1 User.java

                 該文件為用戶對象類,代碼如下所示:

          package com.amigo;

          import java.util.Date;

          /**

           * 用戶對象.

           */

          public class User {

                   /** 用戶名.*/

                   private String loginName;

                   /** 姓名. */

                   private String name;

                   /** 手機號. */

                   private String mobile;

                   /** 地址. */

                   private String address;

                   /** Email.*/

                   private String email;

                   /** 創建時間. */

                   private Date genTime;

                   public String getAddress() {

                             return address;

                   }

                   public void setAddress(String address) {

                             this.address = address;

                   }

                   public String getEmail() {

                             return email;

                   }

                   public void setEmail(String email) {

                             this.email = email;

                   }

                   public String getLoginName() {

                             return loginName;

                   }

                   public void setLoginName(String loginName) {

                             this.loginName = loginName;

                   }

                   public String getMobile() {

                             return mobile;

                   }

                   public void setMobile(String mobile) {

                             this.mobile = mobile;

                   }

                   public String getName() {

                             return name;

                   }

                   public void setName(String name) {

                             this.name = name;

                   }

                   public Date getGenTime() {

                             return genTime;

                   }

                   public void setGenTime(Date genTime) {

                             this.genTime = genTime;

                   }

          }

          3.1.1.2 UserManageBean.java

                 該類為業務邏輯類,提供一個獲取用戶列表的方法,為了減少例子的復雜性,用戶列表不從數據庫中獲取。該類的代碼如下所示:

          package com.amigo;

          import java.util.ArrayList;

          import java.util.List;

          /**

           * 用戶管理業務邏輯類.

           */

          public class UserManageBean {

                   /**

                    * 獲取用戶列表.

                    * @return 返回用戶列表

                    */

                   public List getUserList() {

                             List<User> list = new ArrayList<User>();

                             for (int i = 0; i < 100; i++) {

                                      User user = new User();

                                      user.setAddress("廣州中山大道" + i + "");

                                      user.setEmail("amigo" + i + "@126.com");

                                      user.setLoginName("amigo" + i);

                                      user.setMobile("136666666" + i);

                                      user.setName("阿蜜果" + i);

                                      list.add(user);

                             }

                             return list;

                   }

          }

          3.1.1.3 ViewUserListAction.java

                 該類為Action類,調用業務邏輯類的getUserList()方法獲取用戶列表,并將其放到request中,并跳轉到顯示用戶信息的頁面。該類的內容如下:

          package com.amigo;

          import java.util.List;

          import javax.servlet.http.HttpServletRequest;

          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.action.*;

          /**

           * 用戶列表

           */

          public class ViewUserListAction extends Action {

                   private UserManageBean userManageBean = new UserManageBean();

              /**

               * 調用業務邏輯類獲取用戶信息列表.

               * @param mapping 配置文件信息

               * @param form 表單

               * @param request 請求

               * @param httpServletResponse 回應

               * @return 跳轉到用戶信息列表頁

               */

              public ActionForward execute(ActionMapping mapping,

                      ActionForm form, HttpServletRequest request,

                      HttpServletResponse httpServletResponse) {

                  try {

                      List userList = userManageBean.getUserList();

                      request.setAttribute("userList", userList);

                      return mapping.findForward("viewUserList");

                  } catch (Exception e) {

                      return mapping.findForward("error");

                  }

              }

          }

          3.1.1.4 userList.jsp

                 WebRoot目錄下建立userList.jsp文件,展示用最簡的語句來實現ec分頁。代碼如下所示:

          <%@ page language="java" pageEncoding="UTF-8"%>

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

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

          <html:html locale="true">

                   <head>

                             <title>ec最簡語法實例</title>

                             <link href="${pageContext.request.contextPath}/styles/extremecomponents.css" rel="stylesheet" type="text/css">

                   </head>

                   <body>

              <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                       locale = "zh_CN"

                                      >

                                      <ec:row highlightRow="true"> 

                                               <ec:column property="loginName" title="用戶名"/>

                                               <ec:column property="name" title="姓名"/>

                                               <ec:column property="mobile" title="手機號"/>

                                               <ec:column property="address" title="地址"/>

                                               <ec:column property="email" title="Email"/>

                          </ec:row>

                             </ec:table>

                   </body>

          </html:html>

                 其中<ec:table/>items屬性中的“userList”與ViewUserListAction.java類中的request.setAttribute("userList", userList);中的key對應。

                 <ec:row>

          3.1.1.5 struts-config.xml

                 最后還需要在struts-config.xml中進行相應的配置。配置后的文件內容如下所示:

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

          <struts-config>

           <data-sources />

           <form-beans />

           <global-exceptions />

           <global-forwards />

           <action-mappings>

                             <action path="/viewUserList"

                                               type="com.amigo.ViewUserListAction"

                                               scope="request"

                                               validate="false">

                                      <forward name="viewUserList" path="/userList.jsp" />

                                      <forward name="error" path="/error.jsp" />

                             </action>

           </action-mappings>

           <message-resources parameter="ApplicationResources" />

          </struts-config>

          3.1.1.6 運行

              部署該項目并重新啟動Tomcat后,訪問地址:

                 http://localhost:8080/extremecomponents/viewUserList.do,該例的運行效果如圖5所示:

          5   最簡語句實例運行效果

                 從上圖可以看出,默認情況下,沒頁的記錄條數為15,ec會根據實際情況決定“First”、“Prev”、“Next”和“Last”的按鈕顯示。同時,查詢框在默認情況下是顯示的,用戶在各框中輸入查詢條件后,點擊右上方的“Filter”按鈕,可查出符合該模糊查詢條件的記錄列表。

          3.1.2改變table標簽屬性的實例

                 3.1.1的實例中,jsp頁面ec部分的代碼比較簡單,代碼如下所示:

              <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                                locale = "zh_CN"

                                      >

                                      <ec:row highlightRow="true"> 

                                               <ec:column property="loginName" title="用戶名"/>

                                               <ec:column property="name" title="姓名"/>

                                               <ec:column property="mobile" title="手機號"/>

                                               <ec:column property="address" title="地址"/>

                                               <ec:column property="email" title="Email"/>

                          </ec:row>

                             </ec:table>

                 在上面代碼中,table標簽用來設定什么被顯示并且如何進行顯示。默認的ecservlet范圍尋找具有名稱和items屬性設置相同的Beans集合。 在上例中只是用到了table標簽的itemsactionimagePathlocale屬性,在本節中將對該標簽的所有屬性進行詳細講述。

          3.1.2.1 items

                 該屬性用于表示Beans集合,表示的是取回的集合數據的引用。例如在3.1.1的例子中的userList是在Action中放入到request中的,當然這個屬性還可以放入到pagesessionapplication范圍內,不過ec查找該屬性的順序是按照page -> request -> session -> application的順序的。

                 放入的屬性可以為繼承java.util.Collection的任何類,在3.1.1的例子中java.util.List類就是繼承該類的。集合中的元素一般是普通的javabean或者Map。下面演示一個列表元素為Map類型對象的例子,演示時只需要將3.1.1的例子中的內容修改成如下內容即可:

          package com.amigo;

          import java.util.ArrayList;

          import java.util.HashMap;

          import java.util.List;

          import java.util.Map;

          /**

           * 用戶管理業務邏輯類.

           */

          public class UserManageBean {

                   /**

                    * 獲取用戶列表.

                    * @return 返回用戶列表

                    */

                   public List getUserList() {

                             List<Map> list = new ArrayList<Map>();

                             for (int i = 0; i < 100; i++) {

                                      Map<String, String> map = new HashMap<String, String>();

                                      map.put("address", "廣州中山大道" + i + "");

                                      map.put("email", "amigo" + i + "@126.com");

                                      map.put("loginName", "amigo" + i);

                                      map.put("mobile", "136666666" + i);

                                      map.put("name", "阿蜜果" + i);

                                      list.add(map);

                             }

                             return list;

                   }

          }

                 此時在輸入地址:http://localhost:8080/extremecomponents/viewUserList.do,可看到運行效果同3.1.1的例子是一樣的。

          3.1.2.2 action

                 該屬性用于指定翻頁、導出、查詢請請求時定向的路徑,在3.1.1action屬性的值為:${pageContext.request.contextPath}/viewUserList.do${pageContext.request.contextPath}為上下文路徑。

                 注意:在action的路徑中,不需要將參數放到后面(例如method=list),因為ec會將request中的數據保存。

          3.1.2.3 imagePath

                 該屬性用于設置ec的圖片所在的目錄,例如在3.1.1的例子中ec的圖片在WebRoot/images下,所以該屬性為:${pageContext.request.contextPath}/images/table/*.gif。*gif使得ec知道圖片的格式為GIF。當然,讀者也可以在extremecomponents.properties中設置這個屬性,那就不必每個table標簽都設置該屬性了。

          3.1.2.4 filterable

                 該屬性用來執行記錄的過濾,即在前面所說的對記錄列表進行模糊查詢,也即圖5中查詢框的顯示。該屬性指定的是這個ec表格是不是可過濾的,默認為true,即默認情況下是顯示各查詢框的。

                 讀者可以將該屬性設置為false,當為false時,將不再顯示查詢框

                 不過,column標簽也具有該屬性,若table標簽的該屬性為true,但某列的該屬性為false時,也將不顯示該列的查詢框。如果table標簽的該屬性為false,則盡管各column的所有filterable屬性都為true,也將不顯示查詢框。

          3.1.2.5 sortable

                 該屬性用來執行記錄的排序,即在前面所說的點擊各列的列頭實現升序和降序排列。該屬性指定的是這個ec表格是不是可排序的,默認為true

                 讀者可以將該屬性設置為false,當為false時,點擊各列頭將不會有響應。

                 不過,column標簽也具有該屬性,若table標簽的該屬性為true,但某列的該屬性為false時,也將不顯示該列的查詢框。如果table標簽的該屬性為false,則盡管各column的所有filterable屬性都為true,也將不能對各列進行排序。

          3.1.2.6 rowsDisplayed

                 該屬性用于設置每頁顯示的記錄數,默認每頁顯示15條記錄,讀者可以對其進行修改,例如在3.1.1例中的userList中將table修改成:

          <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                                locale = "zh_CN"

                                      rowsDisplayed = "50"

                                      >

                 此時的運行效果如圖6所示:

          6   rowDisplayed50時的運行結果

          3.1.2.7 cellspacing、cellpaddingborder、width、style、styleClass

                 這些屬性都是用來設置table的樣式的屬性,這與HTMLtable元素的對應屬性是一樣的,因此在此不再贅述。

          3.1.2.8 state

                 這個屬性也是table標簽的一個很有用屬性。

          該屬性有4個取值,分別為:default、notifyToDefaultpersistnotifyToPersist。這4者的描述如下:

          l         default:不維持任何狀態,此為默認的情況;

          l         persist:沒有任何參數傳入,將一直維持表的狀態;

          l         notifyToDefault:將一直維持表的狀態直到你傳入參數告訴它回到default狀態;

          l         notifyToPersist狀態將一直維持當前狀態直到你傳入參數告訴它維持persisted狀態。

          對于需要維持狀態的情況,一般是將該屬性設置為persist。

          3.1.2.9 showPagination

                 該屬性用于設置是否顯示分頁欄和是否需要分頁,默認值為true。當在3.1.1例子中的userList.jsp中的table屬性添加:showPagination = "false"時,運行效果如圖7所示:

          7   不顯示分頁的效果

                 從上圖可以看出右上角的分頁欄:已不再顯示,并且記錄都是在一個頁面顯示,不再分頁顯示。

          3.1.2.10 showStatusBar

                 該屬性用于設置是否顯示狀態條,默認值為true。當在3.1.1例子中的userList.jsp中的table屬性添加:showStatusBar = "false"時,運行效果如圖8所示:

          8   不顯示狀態欄的顯示效果

                 從上圖可以看出,左上方的“找到100 條記錄, 顯示 x y”已經不再顯示。

          3.1.2.11 showTooltips

                 該屬性用于設置當用戶的鼠標移動到某個列頭時是否顯示提示信息,默認時值為true。例如在3.1.1例中當用戶鼠標移動到用戶名這列的列頭時,將顯示“排序用戶名”,當讀者將showTooltips設置為false時,將不會再有這個提示信息。

          3.1.2.12 title

                 該屬性用于設置表的上方的顯示標題,例如在3.1.1的例子中userList.jsptable標簽添加title屬性:title = "用戶列表",顯示效果如圖9所示:

          9   設置了title屬性的顯示效果

          3.1.2.13 var

          表將遍歷所有列,使用var屬性可以將當前行對應的bean從集合傳到page范圍,因此你可以從page范圍中重新得到這些數據 進行操作。例如將3.1.1例子中的userList.jsp修改為如下內容:

          <%@ page language="java" pageEncoding="UTF-8"%>

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

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

          <html:html locale="true">

                   <head>

                             <title>var屬性測試</title>

                             <link href="${pageContext.request.contextPath}/styles/extremecomponents.css" rel="stylesheet" type="text/css">

                   </head>

                   <body>

              <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                                locale = "zh_CN"

                                var="user"

                       >

                                      <ec:row highlightRow="true">

                                               <ec:column property="loginNameAndName" title="用戶名和姓名">

                                                         ${user.loginName}--${user.name}

                                               </ec:column>

                                               <ec:column property="mobile" title="手機號"/>

                                               <ec:column property="address" title="地址"/>

                                               <ec:column property="email" title="Email"/>

                          </ec:row>

                             </ec:table>

                   </body>

          </html:html>

          在上例中,var中定義了列表中遍歷時元素的名稱,在下面的列中,通過user.屬性名的方式獲取各列的信息。運行效果如圖10所示:

          10 var屬性測試的運行效果

          3.1.3改變row標簽屬性的實例

          本小節與3.1.2一樣,在3.1.1的例子上進行改造。在3.1.1中,row標簽使用很簡單,代碼如下所示:

          <ec:row highlightRow="true">

          ……

          </ec:row>

          在本小節中將通過實例的方式講述row標簽的屬性。

          3.1.3.1 highlightRow

                 該屬性用于高亮顯示行,可取值為truefalse,默認值為false。設置為true時,當鼠標移動到某行時將會高亮顯示(顯示為黃色)。如圖11所示:

          11 高亮顯示效果

                 讀者將其設置為false時,再次移動到某行,將不再高亮顯示。

          3.1.3.2 stylestyleClasshighlightClass

                 這幾個屬性用于設置行的樣式,其中style(內聯樣式)和styleClass(指定CSS類)屬性與HTMLtr元素的對應屬性是一樣的,在此不再贅述。highlightClass屬性用于設置行高亮顯示時的css類。

          3.1.3.3 onclickonmouseoveronmouseout

                 這幾個是JavaScript屬性,這三者用于對行數據進行動態交互處理。

          3.1.4改變column標簽屬性的實例

          3.1.4.1 property

                 該屬性用于指定該列使用的bean的屬性。當指定的屬性(eg. loginNamex)不存在時,將顯示為空,若將3.1.1例中的loginName改為loginNamex,則顯示效果如圖12所示:

          12   指定property不存在時的顯示效果

                 也可以在<ec:column></ec:column>中添加顯示的信息,例如將:

                   <ec:column property="loginName" title="用戶名"/>

                 修改為:

                   <ec:column property="loginNamex" title="用戶名">amigo</ec:column>

                 此時的運行效果如圖13所示:

          13   指定property不存在且在列中設置了值時的顯示效果

          3.1.4.2 title

                 該屬性的值即為列頭顯示的值。例如上面各圖中的“用戶名”和“姓名”等。當該屬性沒有設置時,ec將使用property的值作為列頭。

          3.1.4.3 cell

                 每一列總是被實現Cell接口的對象修飾,讀者可以認為Cell是一個為了html顯示或導出而返回格式化值的對象。 發行包包含的CellDisplayCellDateCell、 NumberCellRowCountCell。 DisplayCell是僅僅顯示列值的默認cell;DateCell使用parse屬性(可選)和format屬性來格式化對應的屬性值; NumberCell使用format屬性來格式化對應的屬性值;RowCountCell顯示當前行。

                 下面來看一個DateCell使用的例子,讀者可以在userList.jsp中加上創建時間(genTime)這一列,并在UserManageBean類增加這一列(為Map時):

          map.put("genTime", (new Date()).toString());

          并將Mapnew語句改成:

          Map<String, Object> map = new HashMap<String, Object>();

          或者(為普通bean)

          user.setGenTime(new Date());

                 userList.jsp中增加如下column

          <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

                 此時訪問:http://localhost:8080/extremecomponents/viewUserList.do,運行效果如圖14所示:

          14   columncell屬性設置為date的運行效果

                 讀者也可以對columncell屬性進行擴展,擴展類只需要繼承抽象類AbstractCell即可,下面來看一個例子,我們定義一個LoginNameCell自定義Cell類,該類將loginName屬性前加上“阿蜜果”字符串(只是為了演示自定義Cell的方法,在某列前加上某字符串的功能可以在jsp頁面中通過簡單的方法實現),該類的代碼如下:

          package com.amigo;

          import org.extremecomponents.table.bean.Column;

          import org.extremecomponents.table.cell.AbstractCell;

          import org.extremecomponents.table.core.TableModel;

          /**

           * 用戶名Cell類(將loginName屬性前加上阿蜜果字符串).

           */

          public class LoginNameCell extends AbstractCell {

                   @Override

                   protected String getCellValue(TableModel model, Column column) {

                             String loginName = column.getValue().toString();

                             return "阿蜜果" + loginName;

                   }

          }

          接著在userList.jsp文件中修改loginName列為如下代碼:

          <ec:column property="loginName" title="用戶名" cell="com.amigo.LoginNameCell"/>

                 此時的運行結果如圖15所示:

          15   擴展column標簽的Cell屬性的運行效果

          【提示】cell現在是singleton并且不再線程安全,改變的原因是為了Cell接口能更簡單地被使用。 init()destroy()方法作為singleton更靈活但是處于一種混亂的狀態。

          3.1.4.4 filterCell

                 filterCell屬性用于控制過濾器如何顯示,它和cell屬性非常相像并且也是實現Cell接口。有效值有filterdroplist,默認值為filter。當然讀者也可以在這個基礎上進行擴展,只需要指明確切的列名即可。

          讀者可以將loginName這一列的增加filterCell屬性,并將其值設置為為droplist。

                 filterCell也允許你定義定制的過濾器,所有你必須做的就是實現Cell接口或者擴展AbstractCell, 并設置列標簽的Cell屬性為類的全路徑。例如,如果你定制了一個名為MyCellCell,那么你可以像下面一樣使用它:

          <ec:column property="firstName" filterCell="com.mycompany.cell.MyFilterCell"/>

          3.1.4.5 headerCell

          headerCell屬性控制headers如何顯示,它和cell屬性非常相像并且也是實現Cell接口。 默認header cell作為文本顯示,包含排序邏輯。

          headerCell也允許你定義定制的過濾器,所有你必須做的就是實現Cell接口或者擴展AbstractCell, 并設置列標簽的Cell屬性為類的全路徑。例如,如果你定制了一個名為MyCellCell,那么你可以像下面一樣使用它:

          <ec:column property="firstName" headerCell="com.mycompany.cell.MyHeaderCell"/>

          3.1.4.6 width、style、styleClassheaderStyle、headerClassfilterStylefilterClass

          這幾個屬性都是用來定義樣式的,如下:

          l         width用來定義寬度;

          l         style:定義列內聯的樣式;

          l         styleClass:定義一個列顯示的css類;

          l         headerStyle:定義header的內聯的樣式;

          l         headerClass屬性允許你改變header列的css類;

          l         filterStyle:定義filter列的內聯的樣式;

          l         filterClass屬性允許你改變filter列的css類。

          3.1.4.7 parse

                 這個屬性在講述cell這個屬性舉例的時候有提到過,可以用來格式化Date對象,例如:

          <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

          3.1.4.8 format

                 這個屬性在講述cell這個屬性舉例的時候有提到過,可用來格式化日期型或貨幣型對象,下面舉一個貨幣型格式化的例子:

          <ec:column property="payroll" cell="currency" format="###,###,##0.00"/>

          3.1.4.9 filterable

                 該屬性在講述table標簽的時候有提到過,它用來定義指定的列是不是可過濾的,不過,這個列設置為true時,也只能在table的該標簽為true的時候才能其作用。

          3.1.4.10 sortable

                 該屬性在講述table標簽的時候有提到過,它用來定義指定的列是不是可排序的,不過,這個列設置為true時,也只能在table的該標簽為true的時候才能其作用。

          3.1.4.11 calccalcTitle

                 使用舉例:

          <ec:column property="data" calc="total" calcTitle="Total:" />

          calc屬性實現具有唯一方法的Calc接口:

          public interface Calc {

          public Number getCalcResult(TableModel model, Column column);

          }

          它傳入modelcolumn,并返回一個Number型的值。默認的實現為總計和平均值。

          為了使用定制的Calc,只需要使用ColumnTagcalc屬性來指定實現Calc接口的實現類的 全路徑。

          【提示】Calcsingleton并且不是線程安全的,因此不要定義任何類變量。

          3.1.4.12 viewsAllowed

          viewsAllowed屬性指定類允許使用的視圖。視圖包括:htmlpdf、xls、csv,以及任何定制的視圖。 如果指定一個或幾個視圖,那么列僅能使用這些指定的視圖。例如:指定viewsAllowed="pdf",這意味著 這列只允許PDF導出,而不能進行其他格式的導出或html視圖。例如:

          <ec:table

                             items="userList"

                             action="${pageContext.request.contextPath}/viewUserList.do"

                             imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                       locale = "zh_CN"

                       >

                             <ec:row highlightRow="true">

                                      <ec:column property="loginName" title="用戶名" viewsAllowed="pdf"/>

                                      <ec:column property="name" title="姓名"/>

                                      <ec:column property="mobile" title="手機號"/>

                                      <ec:column property="address" title="地址"/>

                                      <ec:column property="email" title="Email"/>

                                      <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

                  </ec:row>

          </ec:table>

              因為loginName設置了只在pdf視圖顯示,因此在html運行時該列將不顯示,如圖16所示:

          圖16   設置了viewsAllowed為pdf的顯示效果

          3.1.4.13 viewsDenied

          viewsDenied屬性指定類不允許使用的視圖。視圖包括:html、pdf、xls、csv,以及任何定制的視圖。 如果你指定一個或幾個視圖,那么列僅這些指定的視圖不能被使用。例如:你指定viewsDenied="html",這意味著 這列不允許使用html試圖,但能進行任何形式的導出。例如:

          <ec:table

                             items="userList"

                             action="${pageContext.request.contextPath}/viewUserList.do"

                             imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                       locale = "zh_CN"

                       >

                             <ec:row highlightRow="true">

                                      <ec:column property="loginName" title="用戶名"/>

                                      <ec:column property="name" title="姓名" viewsDenied="html"/>

                                      <ec:column property="mobile" title="手機號"/>

                                      <ec:column property="address" title="地址"/>

                                      <ec:column property="email" title="Email"/>

                                      <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

                   </ec:row>

          </ec:table>

          當進行這樣的設置時,運行頁面,將看到name列不顯示,因為它設置在html不顯示。運行效果如圖17所示:

          17   設置viewsDenied屬性為html時的顯示效果

          3.2 高級篇

          3.2.1處理參數

          ec能夠指定是否處理所有的參數。默認為處理所有的參數,這意味著當進行過濾、排序、分頁時,所有的參數都被ec保存并傳到JSP中,這通常是所需要的功能。若只想保存一些特定的參數時,讀者可以通過設置表的autoIncludeParameters屬性值為false來到達目的。

          要傳入的參數通過ecparameter標簽將參數傳遞過去。下面來看一個例子:

          <ec:table   

          items="userList"

                   action="${pageContext.request.contextPath}/viewUserList.do"

          imagePath="${pageContext.request.contextPath}/images/table/*.gif"

          autoIncludeParameters="false"

          <ec:parameter name="name" value="amigo"/>

          ...

          </ec:table>

          3.2.2導出PDF

          若需要使用ec的導出功能,還需要在web.xml中設置一個導出過濾器,增加代碼如下:

          <filter>

                             <filter-name>eXtremeExport</filter-name>

                             <filter-class>org.extremecomponents.table.filter.ExportFilter</filter-class>

           </filter>

           <filter-mapping>

                          <filter-name>eXtremeExport</filter-name>

                             <url-pattern>/*</url-pattern>

           </filter-mapping>

          本小節講述一個在ec中如何導出PDF。ec中提供了exportPdf標簽實現這個功能,該標簽的主要屬性如下:

          3.2.2.1 fileName

                 該屬性用于定義導出的PDF文件的名稱,例如user.PDF。

          3.2.2.2 tooltip

                 用戶的鼠標移動到“導出”圖標時出現的提示信息,例如可設置該屬性為:導出PDF

          3.2.2.3 headerColor

                 定義導出的PDF文件中列頭的顏色,例如設置為“blue”,表示將列頭的顏色設置為藍色。

          3.2.2.4 headerBackgroundColor

                 定義導出的PDF文件中列頭行的背景顏色,例如設置為“red”,表示將列頭行的背景顏色設置為紅色。

          3.2.2.5 headerTitle

                 設置頭行的標題,例如設置為:用戶列表。

          3.2.2.6 完整實例

                 本節的子仍然在3.1.1中的例子上進行改造,userList.jsp的代碼修改成如下所示:

          <%@ page language="java" pageEncoding="UTF-8"%>

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

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

          <html:html locale="true">

                   <head>

                             <title>導出PDF實例</title>

                             <link href="${pageContext.request.contextPath}/styles/extremecomponents.css" rel="stylesheet" type="text/css">

                   </head>

                   <body>

              <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                       locale = "zh_CN"

                       >

                       <ec:exportPdf

                                  fileName="user.pdf"

                                  tooltip="導出PDF"

                                  headerColor="blue"

                                  headerBackgroundColor="red"

                                  headerTitle="用戶列表"/>

                                      <ec:row highlightRow="true">

                                               <ec:column property="loginName" title="用戶名"/>

                                               <ec:column property="name" title="姓名"/>

                                               <ec:column property="mobile" title="手機號"/>

                                               <ec:column property="address" title="地址"/>

                                               <ec:column property="email" title="Email"/>

                                               <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

                      </ec:row>

                             </ec:table>

                   </body>

          </html:html>

                 此時運行:http://localhost:8080/extremecomponents/viewUserList.do,運行效果如圖18所示:

          18   導出PDF實例的運行效果

                 讀者可以看到,在圖18的右上方出現了導出PDF的圖標,當點擊該圖標時,將提示保存PDF文件,打開保存的PDF文件,該文件內容如圖19所示:

          19   PDF的顯示效果

                 從圖19中可以看出,生成的PDF中存在中文亂碼問題,在這個版本中,XLS導出時的亂碼問題已經解決,PDF的導出內容亂碼問題正在解決中,不過網上也提出了一些解決方案,可參見如下兩篇文章:

          最新eXtremeComponents包:支持 PDF中文導出》:

          http://www.aygfsteel.com/lucky/archive/2006/03/archive/2006/03/10/34717.html

          eXtremeComponents FAQ(中文版)》:

          http://blog.163.com/joyce004@126/blog/static/20765732007394454383/

          3.2.3導出Excel

          本小節講述一個在ec中如何導出XLS。ec中提供了exportXls標簽實現這個功能,該標簽的主要屬性如下:

          3.2.3.1 fileName

                 該屬性用于定義導出的Excel文件的名稱,例如user.xls。

          3.2.3.2 tooltip

                 用戶的鼠標移動到“導出”圖標時出現的提示信息,例如可設置該屬性為:導出Excel。

          3.2.3.3 完整實例

                 本節的子仍然在3.1.1中的例子上進行改造,userList.jsp的代碼修改成如下所示:

          <%@ page language="java" pageEncoding="UTF-8"%>

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

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

          <html:html locale="true">

                   <head>

                             <title>導出Excel實例</title>

                             <link href="${pageContext.request.contextPath}/styles/extremecomponents.css" rel="stylesheet" type="text/css">

                   </head>

                   <body>

              <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                       locale = "zh_CN"

                       >

                       <ec:exportXls

                                  fileName="user.xls"

                                  tooltip="導出Excel"/>

                                      <ec:row highlightRow="true">

                                               <ec:column property="loginName" title="用戶名"/>

                                               <ec:column property="name" title="姓名"/>

                                               <ec:column property="mobile" title="手機號"/>

                                               <ec:column property="address" title="地址"/>

                                               <ec:column property="email" title="Email"/>

                                               <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

                      </ec:row>

                             </ec:table>

                   </body>

          </html:html>

                 此時運行:http://localhost:8080/extremecomponents/viewUserList.do,運行效果如圖20所示:

          20 導出Excel的顯示效果

                 從圖20中可以看出,右上方多了一個導出Excel的圖標,點擊該圖標,可將Excel文件導出到所選擇的路徑,導出后的Excel文件如圖21所示:

          21 導出Excel的顯示效果

          3.2.4導出CSV

          本小節講述一個在ec中如何導出CSV。ec中提供了exportCsv標簽實現這個功能,該標簽的主要屬性如下:

          3.2.4.1 fileName

                 該屬性用于定義導出的CSV文件的名稱,例如user.csv。

          3.2.4.2 tooltip

                 用戶的鼠標移動到“導出”圖標時出現的提示信息,例如可設置該屬性為:導出CSV。

          3.2.4.3 delimiter

                 該屬性用來定義分隔符,默認的分隔符為逗號(,),讀者可以自定義分隔符,例如“|”等。

          3.2.3.4 完整實例

                 本節的例子仍然在3.1.1中的例子上進行改造,userList.jsp的代碼修改成如下所示:

          <%@ page language="java" pageEncoding="UTF-8"%>

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

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

          <html:html locale="true">

                   <head>

                             <title>導出CSV實例</title>

                             <link href="${pageContext.request.contextPath}/styles/extremecomponents.css" rel="stylesheet" type="text/css">

                   </head>

                   <body>

              <ec:table

                                      items="userList"

                                      action="${pageContext.request.contextPath}/viewUserList.do"

                                      imagePath="${pageContext.request.contextPath}/images/table/*.gif"

                       locale = "zh_CN"

                       >

                       <ec:exportCsv

                                  fileName="user.csv"

                                  tooltip="導出CSV"

                                  delimiter="|"/>

                                      <ec:row highlightRow="true">

                                               <ec:column property="loginName" title="用戶名"/>

                                               <ec:column property="name" title="姓名"/>

                                               <ec:column property="mobile" title="手機號"/>

                                               <ec:column property="address" title="地址"/>

                                               <ec:column property="email" title="Email"/>

                                               <ec:column property="genTime" title="創建時間" cell="date" parse="yyyy-MM-dd HH:mm" format="yyyy-MM-dd HH:mm"/>

                      </ec:row>

                             </ec:table>

                   </body>

          </html:html>

                 此時運行:http://localhost:8080/extremecomponents/viewUserList.do,運行效果如圖22所示:

          22 導出CSV的顯示效果

                 從圖22中可以看出,右上方多了一個導出CSV的圖標,點擊該圖標,可將CSV文件導出到所選擇的路徑,導出后的CSV文件如圖23所示:

          23 導出的CSV的顯示效果

          4. 附錄

          參考文章:

          eXtremeComponents參考文檔》:

          http://www.aygfsteel.com/lucky/articles/33380.html

          extremeTable釋疑》:

          http://blog.csdn.net/pangpangde/archive/2006/07/13/913326.aspx

          最新eXtremeComponents包:支持 PDF中文導出》:

          http://www.aygfsteel.com/lucky/archive/2006/03/archive/2006/03/10/34717.html

          eXtremeComponents FAQ(中文版)》:

          http://blog.163.com/joyce004@126/blog/static/20765732007394454383/

          posted on 2008-01-08 09:25 阿蜜果 閱讀(12336) 評論(9)  編輯  收藏 所屬分類: extremecomponents


          FeedBack:
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)[未登錄]
          2008-01-08 10:32 | jeff
          同學好勤勞!
          ET已經停止更新,可以關注一下Jmesa :)  回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)
          2008-01-08 11:12 | 阿蜜果
          嘻嘻,在做一些已接觸的知識的總結呢!  回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)
          2008-01-10 00:08 | 過河卒
          呵呵,很久以前用它的?,F在也有自己人擴展的, 可以Search一下 ecside。  回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)
          2008-01-10 11:46 | 老李
          看你的blog很長時間了,從中也學到很多知識,望越來越好!
          我的問題是:
          程序頂端的下拉式菜單,就像記事本中的文件--編輯--格式--查看--幫助,點擊他們每一項后下拉菜單.
          現在我要實現這種功能,像記事本中的每一項目都要從數據庫中提取數據后顯示出來,現在google了好多,只看到是用css樣式+固定的js來實現,但我現在不知道如何從數據庫提取數據后,把數據生成下拉菜單,請給于解答,不勝感激,著急啊!E-mail:yuxiang1998@163.com  回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)[未登錄]
          2008-01-10 11:54 | 阿蜜果
          @老李
          沒太看懂你的意思。
          不知道如何從數據庫提取數據后,把數據生成下拉菜單?
          遍歷就行了啊
            回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)
          2008-01-11 11:01 | awed
          確實很好,功能也強大,但就是一次查詢出所有的數據,能支持一次只查詢一定果的數據顯示,等下一頁再到數據庫中取嗎?  回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)
          2008-07-14 16:54 | xiangmingwen
          @awed
          eXtremeComponents-1.0.1-with-dependencies.zip包碼、我的郵箱是
          x404328092x@126.com

          謝謝了。官方網站不能連接上呀  回復  更多評論
            
          # re: 【eXtremeComponents總結系列】使用總結(不定期更新中)
          2009-09-04 16:58 |
          看了你的文章 很有收獲 但是項目中使用ECTABLE的時候發現有這個問題
          比如說我在第十頁修改某條數據 返回LIST頁面的時候總是跳到第一頁去了
          如何返回到操作前的第十頁呢?  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296322
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吐鲁番市| 莱芜市| 铜山县| 华阴市| 和田市| 宁南县| 都兰县| 阜阳市| 理塘县| 通辽市| 湖北省| 靖西县| 林周县| 皋兰县| 基隆市| 玉田县| 满洲里市| 东宁县| 穆棱市| 靖江市| 故城县| 石泉县| 遵义县| 来宾市| 武穴市| 沛县| 佛坪县| 安阳市| 赤城县| 噶尔县| 克什克腾旗| 石台县| 汉阴县| 奉贤区| 资中县| 和田市| 新巴尔虎右旗| 都兰县| 固安县| 新密市| 临邑县|