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

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

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

    幸せのちから

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

    Chapter 15. 1.0.1-M4升級說明(1)

    Chapter 15. 1.0.1-M4升級說明

    15.1. 變更概述

    下面的特性已經被更改:

    • HtmlView基于原來代碼的實現已經deprecated

    • Cell接口更簡單

    • 增加RowTag

    • AutoGenerateColumns變為singleton,更易添加列屬性

    • Extended Attributes方法名變更

    • TableTag的collection屬性被刪除

    • BaseModel更名為TableModel

    • Properties和ResourceBundle現在為Preferences和Messages

    • pageContext被Context接口代替

    • Limit和LimitFactory的語法變更,更易于使用

    • TableTag的saveFilterSort屬性被state屬性代替

    • ColumnTag的showTotal屬性被calc屬性代替

    • search圖片的名稱變為filter

    • FormTag/InputTag為deprecated

    • RetrieveRowsCallbacks、FilterRowsCallback、SortRowsCallback都變為singletons

    15.1.1. HtmlView

    我把和舊的view相關的代碼:原始的view、cell和相關代碼放到deprecated文件夾。 原因是新的view代碼非常成功,所以沒有必要使用舊的代碼。使用新代碼構建定制view請參考 view包中的HtmlView或CompactView。

    15.1.2. Cell

    Cell接口已經改變,原因是想結束混亂以提高靈活性。以前對于如何處理區分html和export顯示值 不是十分明顯。現在Column值設置html,Column的propertyValue設置export。另外因為Column值和 propertyValue值被重寫。現在他們在view中是不可見的。

    cell現在是singleton并且不再線程安全,因此不要定義任何類變量。改變的原因是為 了Cell接口能更簡單地被使用。init()和destroy()方法作為singleton更靈活但是處于一種混亂的狀態。

    Cell接口如下:

    public interface Cell {

    /**
    * The display that will be used for the exports.
    */
    public String getExportDisplay(TableModel model, Column column);

    /**
    * The html that will be displayed in the table.
    */
    public String getHtmlDisplay(TableModel model, Column column);
    }

    現在得到導出和html顯示存在明顯的區別。更重要的,需要返回字符串。列值和屬性值不再 需要設置。另一個細微的區別是:BaseModel已經被TableModel取代。這種改變是的不再需要一個 基礎包(base package),這意味著不再需要BaseModel。

    cell變為singleton不會導致使用復雜,如果你定義了任何類變量只需要把他們放到正確的 方法那么他們就能被任何其他方法使用。

    BaseCell被刪除因為不再需要添加任何值。替代的是AbstractCell,虛擬方法 getCellValue被用來返回cell的值。這種方法非常容易使用并不需要關心markup。查看 AbstractCell也是有意義的,你會發現這代碼實現的多么簡單。然而,很多時候需要做的僅僅是 實現Cell接口:

    DisplayCell:

    public class DisplayCell extends AbstractCell {
    public String getExportDisplay(TableModel model, Column column) {
    return column.getPropertyValueAsString();
    }

    protected String getCellValue(TableModel model, Column column) {
    return column.getValueAsString();
    }
    }

    AbstractCell:

    public abstract class AbstractCell implements Cell {
    public String getExportDisplay(TableModel model, Column column) {
    return getCellValue(model, column);
    }

    public String getHtmlDisplay(TableModel model, Column column) {
    HtmlBuilder html = new HtmlBuilder();
    CellBuilder.tdStart(html, column);
    CellBuilder.tdBody(html, getCellValue(model, column));
    CellBuilder.tdEnd(html);
    return html.toString();
    }

    /**
    * A convenience method to get the display value.
    */
    protected abstract String getCellValue(TableModel model, Column column);
    }

    15.1.3. RowTag

    RowTag<ec:row> 現在被需要,它被用來替代columns。 現在看來它一直被需要。它不知道表中到底有多少列,最近重構的時候我通過 Table -> Row -> Column使結構固定來合并得到更好的靈活性。將來我可能提供更多的 特性,因為我知道eXtremeTable有著清晰的架構。

    典型的eXtremeTable如下:

    <ec:table
    items="presidents"
    var="pres"
    action="${pageContext.request.contextPath}/presidents.run"
    >
    <ec:row>
    <ec:column property="name"/>
    <ec:column property="term"/>
    </ec:row>
    </ec:table>

    15.1.4. AutoGenerateColumns

    AutoGenerateColumns得到了很大的提高,現在你只需要設置你需要的屬性。 當你添加列到ColumnHandler使,defaults將別自動調用。

    AutoGenerateColumns為singleton并且不是線程安全的,因此不要定義任何類變量。

    現在它的實現可能如下:

    public class AutoGenerateColumnsImpl implements AutoGenerateColumns {
    public void addColumns(TableModel model) {
    Iterator iterator = columnsToAdd().iterator();
    while (iterator.hasNext()) {
    Map columnToAdd = (Map) iterator.next();
    Column column = new Column(model);
    column.setProperty((String) columnToAdd.get(PROPERTY));
    column.setCell((String) columnToAdd.get(CELL));
    model.getColumnHandler().addAutoGenerateColumn(column);
    }
    }
    }

    15.1.5. Extended Attributes

    addExtendedAttributes方法重命名使得如何使用這個特性更清晰。 因此RowTag的addExtendedAttributes現在變為addRowAttributes,ColumnTag變 為addColumnAttributes,TableTag變為addTableAttributes,ExportTag變 為addExportAttributes。另外你參考正確的model bean(它的實現更清晰), 將知道如何添加屬性到你的cell、view.....

    使用ExportCsvTag的示例如下:

    public void addExportAttributes(Export export) {
    String view = export.getView();
    if (StringUtils.isBlank(view)) {
    export.setView(TableConstants.CSV);
    export.setImageName(TableConstants.CSV);
    }
    export.addAttribute(CsvView.DELIMITER, getDelimiter());
    }

    為了得到delimiter屬性值你只需要從Export bean中get它:

    Export export = model.getExportHandler().getCurrentExport();
    String delimiter = export.getAttributeAsString(DELIMITER);

    現在你需要在ExportTag中覆蓋它,你只需要調用setter方法。如果是新的屬性,那么使用 可以和前一版一樣使用addAttribute()方法。為了得到值,首先從ExportHandler得到Export, 然后調用需要的getter方法。這和使用其它tags一樣。

    在RowTag和ColumnTag中增加了兩個新的callback方法:modifyRowAttributes和 modifyColumnAttributes,因此你可以在rows/columns被處理時改變屬性值。

    posted on 2006-03-02 13:14 Lucky 閱讀(613) 評論(0)  編輯  收藏 所屬分類: extremeComponents

    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導航

    隨筆分類(125)

    文章分類(5)

    日本語

    搜索

    積分與排名

    最新隨筆

    最新評論

    主站蜘蛛池模板: 亚洲小视频在线播放| 羞羞视频免费观看| 国产免费午夜a无码v视频| 一级毛片aa高清免费观看| 蜜芽亚洲av无码精品色午夜| 四虎成人免费观看在线网址| 国产精品福利片免费看| 亚洲人色大成年网站在线观看| 一本久久综合亚洲鲁鲁五月天| 免费女人高潮流视频在线观看| 久久久久久亚洲av无码蜜芽| 国产精品亚洲а∨无码播放| 成人毛片免费视频| 日韩电影免费在线观看| 国产精品亚洲av色欲三区| 亚洲成色www久久网站夜月| 在线观看人成网站深夜免费| 免费在线看污视频| 国产成人亚洲精品蜜芽影院| 久久亚洲精品无码aⅴ大香 | 在线毛片片免费观看| 精品国产成人亚洲午夜福利| 久久青青成人亚洲精品| 爽爽日本在线视频免费| 5555在线播放免费播放| 国产又黄又爽又大的免费视频 | 亚洲人色大成年网站在线观看 | 日韩电影免费在线观看网址| 亚洲国产成人精品电影| 国产亚洲精品国产| mm1313亚洲精品国产| 97无码免费人妻超级碰碰夜夜| 久久精品无码精品免费专区| 国产精品成人亚洲| 国产精品亚洲自在线播放页码 | 亚洲欧洲精品成人久久曰| 亚洲va久久久噜噜噜久久男同| 亚洲 自拍 另类小说综合图区| 好爽…又高潮了免费毛片| 最近中文字幕2019高清免费| 免费在线看污视频|