幸せのちから

          平凡的世界
          看似平常實(shí)崎嶇
          成如容易卻艱辛

          Chapter 3. TableTag

          Chapter 3. TableTag

          3.1. 引言

          TableTag用來設(shè)定什么被顯示并且如何進(jìn)行顯示。默認(rèn)的eXtremeTable在servlet范圍(按照page,request, session,applicaton的順序)尋找具有名稱和items屬性設(shè)置相同的Beans集合(如前章所述它指Beans和Maps兩種集合)。 表將遍歷所有列,它使用var屬性將當(dāng)前行對(duì)應(yīng)的bean從集合傳到page范圍,因此你可以從page范圍中重新得到這些數(shù)據(jù) 進(jìn)行操作。tableId用來唯一標(biāo)識(shí)表,如果在JSP頁面里包含兩個(gè)或兩個(gè)以上的表時(shí)需要設(shè)置它。

          President bean定義如下:

          public class President implements Serializable {
          private String firstName;
          private String lastName;

          public String getFirstName() {
          return firstName;
          }

          public void setFirstName(String firstName) {
          this.firstName = firstName;
          }

          public String getLastName() {
          return lastName;
          }

          public void setLastName(String lastName) {
          this.lastName = lastName;
          }
          }

          Beans集合需要被組裝并傳到servlet范圍中。我喜歡使用Spring框架,因此示例將使用Spring框架的 控制器(Controller)。如果你正在使用Struts,它和Action的功能類似。如果你使用別的東西,比如直接使用 servlets,你只需要明白我所做的只是組裝Beans集合并傳到request范圍中。

          public class Presidents extends AbstractController {
          protected ModelAndView handleRequestInternal(HttpServletRequest request,
          HttpServletResponse response)
          throws Exception {
          List presidents = new ArrayList();

          President president = new President();

          president.setFirstName("George");
          president.setLastName("Washington");
          presidents.add(president);

          president = new President();
          president.setFirstName("John");
          president.setLastName("Adams");
          presidents.add(president);

          request.setAttribute("presidents", presidents);

          return new ModelAndView("/demo/presidents.jsp");
          }

          現(xiàn)在你可以構(gòu)造表了:

          <%@ taglib uri="/tld/extremecomponents" prefix="ec" %>

          <ec:table
          items="presidents"
          var="pres"
          imagePath="${pageContext.request.contextPath}/images/*.gif"
          action="${pageContext.request.contextPath}/presidents.run"
          >
          <ec:column property="firstName"/>
          <ec:column property="lastName"/>
          ${pres.lastName}
          </ec:column>
          </ec:table>

          從本示例中你應(yīng)該知道我們將名為presidents的Beans集合以presidents為名稱放到request中。 為了使表知道如何找到這個(gè)Beans集合,我們?cè)O(shè)置TableTag的items屬性為presidents。同時(shí)我們定義 了兩列:firstName和lastName。firstName列是最普通的用法:我們僅僅想讓這列從當(dāng)前bean中得到相應(yīng) firstName的值;lastName列示另外一種用法:明確取得值。

          從一列中明確取得值非常有用,但是你需要理解表是如何構(gòu)造行的。為了構(gòu)造行,表需要對(duì)所有行進(jìn)行 rowsDisplayed屬性設(shè)定次數(shù)的迭代。每次迭代都從Beans里取得下一個(gè)bean并使用var屬性設(shè)定的名稱傳入page 范圍。也可以說每次迭代你都訪問的是集合中當(dāng)前行對(duì)應(yīng)的bean。

          3.2. 顯示圖片

          為了顯示圖片需要設(shè)置imagePath屬性:

          <ec:table
          items="presidents"
          var="pres"
          imagePath="${pageContext.request.contextPath}/images/*.gif"
          >
          ...
          </ec:table>

          eXtremeTable將找到一個(gè)目錄下的所有圖片并使用特殊的語法來定義他們是那類圖片。 本示例中所有的圖片都直接保存在web上下文的images目錄下。*.gif使eXtremeTable知道所 有的圖片都是GIF格式的。在我們討論preferences后,你將發(fā)現(xiàn)你可以你可以通過在 extremecomponents.properties文件中設(shè)定這個(gè)屬性,而不用再整個(gè)應(yīng)用的每個(gè)eXtremeTable 中包含它。

          3.3. 過濾、排序和動(dòng)作(Action)

          eXtremeTable內(nèi)嵌了過濾和排序功能,你只需要決定是否需要使用他們。你要使用的屬性是 filterable和sortable,他們都是布爾值并且默認(rèn)值是true。默認(rèn)的所有特性都有效,你可以按照 需要來關(guān)掉一些特性。比如,如果你不想使用排序或過濾你可以把他們的屬性設(shè)為false。

          <ec:table
          items="presidents"
          var="pres"
          imagePath="${pageContext.request.contextPath}/images/*.gif"
          action="${pageContext.request.contextPath}/presidents.run"
          filterable="false"
          sortable="false"
          >
          ...
          </ec:table>

          如果你仍不確信,你可以來驗(yàn)證他們。首先,設(shè)置filterable和sortable為true,你將看到 eXtremeTable允許你輸入關(guān)鍵詞來過濾結(jié)果集,它也允許你通過在頁頭(header)上滾動(dòng)鼠標(biāo)來排序。 然后,設(shè)置filterable和sortable為fale,你將發(fā)現(xiàn)所有這些特性都不允許使用。

          本示例需要指出的是使用action屬性,action被用來告訴eXtremeTable當(dāng)過濾或排序時(shí)如何回 到當(dāng)前的頁面。本例中我通過Spring框架的controller(在這里是presidents.run)來得到Beans集合。 你不需要擔(dān)心傳參問題,eXtremeTable將保存所有的參數(shù)并將它們和過濾器、排序、分頁一起傳遞給 Beans集合。更詳細(xì)的信息請(qǐng)參考ParameterTag。

          3.4. 設(shè)定每頁顯示行數(shù)

          默認(rèn)地eXtremeTable一頁將顯示15行。你可以通過設(shè)定rowsDisplayed屬性為你想顯示行數(shù)的數(shù) 值來改變它。rowsDisplayed也可以在extremecomponents.properties文件中設(shè)定。(參考Preferences)。

          提示:如果你想在一頁中顯示所有行,只需要設(shè)置showPagination為false。

          3.5. 樣式

          TableTag關(guān)聯(lián)了很多樣式屬性:

          <ec:table
          cellspacing="0"
          cellpadding="0"
          border="0"
          width="80%"
          style=""
          styleClass=""
          />

          所有這些都是可選的。

          3.6. 保存表的狀態(tài)

          表新增了兩個(gè)屬性:state和stateAttr。state屬性參照State借口并能插接如何保存表的狀態(tài)的不同實(shí)現(xiàn)。

          State借口如下:

          public interface State {
          public void saveParameters(TableModel model, Map parameters);
          public Map getParameters(TableModel model);
          }

          state屬性使用預(yù)設(shè)的四種狀態(tài)(default、notifyToDefault、persist和notifyToPersist)之一, 你也可以插接自己的實(shí)現(xiàn)。default狀態(tài)不維持任何狀態(tài);persist狀態(tài)沒有任何參數(shù)傳入,將一直維持表的狀態(tài); notifyToDefault狀態(tài)將一直維持表的狀態(tài)直到你傳入?yún)?shù)告訴它回到default狀態(tài);notifyToPersist狀態(tài) 將一直維持當(dāng)前狀態(tài)直到你傳入?yún)?shù)告訴它維持persisted狀態(tài)。

          stateAttr為指定參數(shù)提供了一條途徑,你也可以使用屬性文件在全局范圍內(nèi)指定它。 為了向后兼容,默認(rèn)參數(shù)一直為useSessionFilterSort。

          如果你想state按照不同方式工作你只要實(shí)現(xiàn)State接口,然后使用TableTag的state屬性來指定實(shí)現(xiàn)類的 全路徑。

          作為一條首要規(guī)則當(dāng)使用state屬性時(shí),需要指定tableId。這是因?yàn)閟tate使用tableId為名保存在session里。 如果tableId不唯一,eXtremeTable將覆蓋另一個(gè)同名的內(nèi)容。tableId默認(rèn)值為ec。

          3.7. 其他屬性

          為了保持一致性,所有的顯示特性都命名為showXXXX。他們包括showPagination、showStatusBar、 showTooltips、和showExports。

          title屬性將在表的上方顯示標(biāo)題,標(biāo)題的位置根據(jù)使用的視圖不同而不同。當(dāng)前默認(rèn)視圖中標(biāo)題位于表的上方 工具條的左邊。更詳細(xì)的信息請(qǐng)參考View。

          你會(huì)發(fā)現(xiàn)還有一些屬性沒有被探討,因?yàn)樗麄儗⒃谄渌绿接憽utoIncludeParameters在ParameterTag里被探討; retrieveRowsCallback,sortRowsCallback和filterRowsCallback在Callbacks里被探討。

          3.8. 擴(kuò)展屬性

          大多數(shù)標(biāo)簽包含一系列的固定屬性,這樣那些已經(jīng)實(shí)現(xiàn)的功能能夠被使用。然而,eXtremeTable具有一種更具彈性的架構(gòu), 你可以添加自己的標(biāo)簽屬性實(shí)現(xiàn)更多的定制工作。此外,eXtremeTable提供了非常清晰的鉤子(hooks)允許你得到那些定制的 標(biāo)簽屬性來做一些你需要的工作。

          通過addExtendedAttributes()方法將擴(kuò)展屬性包含到eXtremeTable里:

          public void addExtendedAttributes(Table table);

          如果方法被覆蓋TableTag將調(diào)用它。你需要做的就是擴(kuò)展TableTag,覆蓋addExtendedAttributes()方法,然后添加自己 的屬性到表對(duì)象中。一個(gè)定制的TreeTag示例如下:

          public class TreeTag extends TableTag {
          private String parentAttribute;
          private String identifier;

          public void setParentAttribute(String parentAttribute) {
          this.parentAttribute = parentAttribute;
          }

          public void setIdentifier(String identifier) {
          this.identifier = identifier;
          }

          public void addExtendedAttributes(Table table) {
          table.addAttribute(TableConstants.PARENT_ATTRIBUTE, TagUtils.evaluateExpressionAsString("parentAttribute",
          parentAttribute, this, pageContext));
          table.addAttribute(TableConstants.IDENTIFIER, TagUtils.evaluateExpressionAsString("identifier",
          identifier, this, pageContext));

          table.setFilterRowsCallback("org.extremecomponents.tree.ProcessTreeRowsCallback");
          table.setSortRowsCallback("org.extremecomponents.tree.ProcessTreeRowsCallback");
          }
          }

          現(xiàn)在你添加了屬性值到table對(duì)象。

          另外,你也可以定制自己的標(biāo)簽和自己的TLD文件。你不需要修改extremecomponents.tld文件。 你能象使用eXtremeTable里的標(biāo)簽一樣使用自己的標(biāo)簽,除了使用你自己標(biāo)簽的參照。假如你的標(biāo)簽參照為mycompany 并且標(biāo)簽為customTable,你可以先下面一樣使用他們:

          <mycompany:customTable
          items="presidents"
          action="${pageContext.request.contextPath}/public/demo/presidents.jsp"
          title="Presidents"
          >
          <ec:row>
          <ec:column property="nickName"/>
          </ec:row>
          </mycompany:customTable>

          posted on 2006-02-26 12:12 Lucky 閱讀(1112) 評(píng)論(2)  編輯  收藏 所屬分類: extremeComponents

          評(píng)論

          # re: Chapter 3. TableTag[未登錄] 2007-12-07 17:31 scott

          請(qǐng)問一下,我想實(shí)現(xiàn)點(diǎn)擊ET中某一行具體數(shù)據(jù)查看明細(xì)后,再返回,

          怎樣保持原來查詢的記錄集及頁碼相同.


          是設(shè)置state嗎?
          我設(shè)置了試了一下.但不起作用..
            回復(fù)  更多評(píng)論   

          # re: Chapter 3. TableTag 2008-12-30 17:36 jack Montns

          我不要他顯示最大最小值。怎么設(shè)置  回復(fù)  更多評(píng)論   

          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          導(dǎo)航

          隨筆分類(125)

          文章分類(5)

          日本語

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          主站蜘蛛池模板: 旌德县| 九龙城区| 呼伦贝尔市| 忻州市| 乌拉特前旗| 襄城县| 宣化县| 犍为县| 浑源县| 南召县| 前郭尔| 林西县| 彭泽县| 怀化市| 大姚县| 边坝县| 陆良县| 仁怀市| 灵川县| 六安市| 昌乐县| 友谊县| 杂多县| 化州市| 高淳县| 舟山市| 多伦县| 儋州市| 伊金霍洛旗| 咸丰县| 繁昌县| 永仁县| 九江县| 昂仁县| 绥中县| 新龙县| 玛多县| 新巴尔虎左旗| 丽江市| 崇礼县| 甘南县|