幸せのちから

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

          Chapter 13. AutoGenerateColumns

          Chapter 13. AutoGenerateColumns

          13.1. 引言

          大多數情況下你按照你需要的列來設計數據庫表。但是,有時候需要運行時動態生成一些列。 為了實現這點,eXtremeTable需要使用ColumnsTag并設置autoGenerateColumns屬性。

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

          13.2. ColumnsTag

          ColumnsTag只有autoGenerateColumns這一個屬性。所有你必須做的就是實現AutoGenerateColumns接口, 并設置autoGenerateColumns屬性為類的全路徑。

          <ec:table
          items="presidents"
          action="${pageContext.request.contextPath}/autoGenerateColumns.run"
          title="Presidents"
          >
          <ec:columns autoGenerateColumns="org.extremesite.controller.AutoGenerateColumnsImpl"/>
          </ec:table>

          AutoGenerateColumns接口只有一個方法:

          public void addColumns(TableModel model);

          你需要做的就是添加列(columns)到model里。最簡單的示例如下:

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

          示例中columnsToAdd()方法簡單返回一個包含生成列(columns)需要的所有信息的集合。 作為參考,下面是我在eXtremeComponents網站實例中使用的columnsToAdd()方法:

          private List columnsToAdd() {
          List columns = new ArrayList();
          columns.add(columnToAdd("fullName", "display"));
          columns.add(columnToAdd("nickName", "display"));
          columns.add(columnToAdd("term", "display"));
          columns.add(columnToAdd("born", "date"));
          columns.add(columnToAdd("died", "date"));
          columns.add(columnToAdd("career", "display"));

          return columns;
          }

          private Map columnToAdd(String property, String cell) {
          Map column = new HashMap();
          column.put(Column.PROPERTY, property);
          column.put(Column.CELL, cell);
          return column;
          }

          另外,我想聲明的是只創建列一次。eXtremeTable為了高效,不會每行創建一列, 而是通過循環持續插入新列值到已經存在的列。記住TableModel能夠訪問Context,因此 你可以在Controller(Spring)或Action(Struts)中定義樣式(look like)并通過request傳輸集合。 所以你得AutoGenerateColumns實現只需要構建列(Columns)并添加到model.columns里。

          posted on 2006-02-28 21:50 Lucky 閱讀(968) 評論(0)  編輯  收藏 所屬分類: extremeComponents

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

          導航

          隨筆分類(125)

          文章分類(5)

          日本語

          搜索

          積分與排名

          最新隨筆

          最新評論

          主站蜘蛛池模板: 石楼县| 镇远县| 准格尔旗| 阿拉善右旗| 时尚| 浪卡子县| 乳源| 东光县| 靖安县| 海城市| 牡丹江市| 富锦市| 柳河县| 耿马| 丁青县| 曲沃县| 巴南区| 沁水县| 珠海市| 康乐县| 界首市| 清镇市| 定襄县| 临海市| 阆中市| 瑞丽市| 鲜城| 霸州市| 抚远县| 绍兴市| 靖西县| 从江县| 修文县| 安仁县| 钦州市| 万荣县| 乳源| 盐边县| 于都县| 赞皇县| 广汉市|