<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    幸せのちから

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

    Chapter 3. TableTag

    Chapter 3. TableTag

    3.1. 引言

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

    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");
    }

    現在你可以構造表了:

    <%@ 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>

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

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

    3.2. 顯示圖片

    為了顯示圖片需要設置imagePath屬性:

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

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

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

    eXtremeTable內嵌了過濾和排序功能,你只需要決定是否需要使用他們。你要使用的屬性是 filterable和sortable,他們都是布爾值并且默認值是true。默認的所有特性都有效,你可以按照 需要來關掉一些特性。比如,如果你不想使用排序或過濾你可以把他們的屬性設為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>

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

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

    3.4. 設定每頁顯示行數

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

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

    3.5. 樣式

    TableTag關聯了很多樣式屬性:

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

    所有這些都是可選的。

    3.6. 保存表的狀態

    表新增了兩個屬性:state和stateAttr。state屬性參照State借口并能插接如何保存表的狀態的不同實現。

    State借口如下:

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

    state屬性使用預設的四種狀態(default、notifyToDefault、persist和notifyToPersist)之一, 你也可以插接自己的實現。default狀態不維持任何狀態;persist狀態沒有任何參數傳入,將一直維持表的狀態; notifyToDefault狀態將一直維持表的狀態直到你傳入參數告訴它回到default狀態;notifyToPersist狀態 將一直維持當前狀態直到你傳入參數告訴它維持persisted狀態。

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

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

    作為一條首要規則當使用state屬性時,需要指定tableId。這是因為state使用tableId為名保存在session里。 如果tableId不唯一,eXtremeTable將覆蓋另一個同名的內容。tableId默認值為ec。

    3.7. 其他屬性

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

    title屬性將在表的上方顯示標題,標題的位置根據使用的視圖不同而不同。當前默認視圖中標題位于表的上方 工具條的左邊。更詳細的信息請參考View。

    你會發現還有一些屬性沒有被探討,因為他們將在其他章探討。autoIncludeParameters在ParameterTag里被探討; retrieveRowsCallback,sortRowsCallback和filterRowsCallback在Callbacks里被探討。

    3.8. 擴展屬性

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

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

    public void addExtendedAttributes(Table table);

    如果方法被覆蓋TableTag將調用它。你需要做的就是擴展TableTag,覆蓋addExtendedAttributes()方法,然后添加自己 的屬性到表對象中。一個定制的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");
    }
    }

    現在你添加了屬性值到table對象。

    另外,你也可以定制自己的標簽和自己的TLD文件。你不需要修改extremecomponents.tld文件。 你能象使用eXtremeTable里的標簽一樣使用自己的標簽,除了使用你自己標簽的參照。假如你的標簽參照為mycompany 并且標簽為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 閱讀(1106) 評論(2)  編輯  收藏 所屬分類: extremeComponents

    評論

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

    請問一下,我想實現點擊ET中某一行具體數據查看明細后,再返回,

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


    是設置state嗎?
    我設置了試了一下.但不起作用..
      回復  更多評論   

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

    我不要他顯示最大最小值。怎么設置  回復  更多評論   

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

    導航

    隨筆分類(125)

    文章分類(5)

    日本語

    搜索

    積分與排名

    最新隨筆

    最新評論

    主站蜘蛛池模板: 国产免费牲交视频免费播放 | 国产精成人品日日拍夜夜免费| 伊人免费在线观看高清版| 国产小视频免费观看| 亚洲欧美日韩中文二区| 欧美在线看片A免费观看| 国产精品亚洲精品| 成人超污免费网站在线看| 亚洲综合最新无码专区| fc2成年免费共享视频18| 国产成人亚洲综合无码| 亚洲一区二区三区在线| 一本岛高清v不卡免费一三区| 亚洲精品在线视频| 亚洲免费在线视频播放| 成人毛片18女人毛片免费96 | 免费看少妇高潮成人片| 亚洲精品成人网站在线观看 | 亚洲人成电影在线播放| 国产精品免费看久久久香蕉| 国产亚洲成人久久| 国产精品白浆在线观看免费| 亚洲国产成人久久| 特级精品毛片免费观看| 亚洲成人福利网站| 国产精品免费观看调教网| 久久狠狠高潮亚洲精品| 成年男女男精品免费视频网站| 亚洲国产一区在线| 国产一精品一AV一免费孕妇 | 99爱在线观看免费完整版| 亚洲午夜激情视频| 免费在线观看亚洲| 亚洲综合熟女久久久30p| 中文字幕免费视频一| 亚洲欧美精品午睡沙发| 亚洲午夜国产精品无码老牛影视 | 又粗又黄又猛又爽大片免费| a级片在线免费看| 色噜噜亚洲男人的天堂| 国产精品亚洲不卡一区二区三区|