幸せのちから

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

          Html視圖定制指南

          Html視圖定制指南


          1. 引言

          eXtremeTable使用View接口來(lái)生成HTML。你可以使用發(fā)行包已經(jīng)提供的視圖,或者你可以插入自己的視圖實(shí)現(xiàn)。 現(xiàn)在,創(chuàng)建你自己的視圖相對(duì)比較簡(jiǎn)單,但討論一些設(shè)計(jì)想法和如何著手實(shí)現(xiàn)一個(gè)定制的視圖還是有價(jià)值的。

          我想使創(chuàng)建定制視圖簡(jiǎn)單,但不是想構(gòu)造一個(gè)更復(fù)雜的類似swing的模型,原因是那需要?jiǎng)?chuàng)建大量的對(duì)象來(lái)處理對(duì)應(yīng)的內(nèi)部工作。 eXtremeTable以高效為目標(biāo),我也想在視圖的實(shí)現(xiàn)上貫徹這種想法,所以我決定創(chuàng)建一系列的靜態(tài)構(gòu)造器類來(lái)實(shí)現(xiàn)分解的最小功能。你可以通過(guò)組合這些功能來(lái)實(shí)現(xiàn)你的定制視圖。

          學(xué)習(xí)定制視圖的最好途徑是閱讀已經(jīng)存在的視圖的源代碼,修改它來(lái)滿足你的需求。如果我示范所有東西的話,這篇指南將變的非常冗長(zhǎng)。取而代之的是我將直接修改默認(rèn)視圖的工具條作為定制視圖的一個(gè)示例。 對(duì)于不同構(gòu)造器的具體細(xì)節(jié)我建議你閱讀源代碼。我也將盡量更新javadocs來(lái)提供更好的幫助。

          1.1. View接口

          實(shí)現(xiàn)View接口的類有3次插入內(nèi)容的機(jī)會(huì)。beforeBody()方法會(huì)被立刻調(diào)用,body()方法在每一行的每一列處理的時(shí)候調(diào)用。 afterBody()方法是被eXtremeTable調(diào)用的最后方法,它將返回代表視圖的一個(gè)對(duì)象。在這個(gè)HTML視圖示例里,它將是一個(gè)字符串。

          public interface View {
          public void beforeBody(TableModel model);
          public void body(TableModel model, Column column);
          public Object afterBody(TableModel model);
          }

          1.2. Messages示例

          在這篇指南里我將直接修改工具條來(lái)實(shí)現(xiàn)這網(wǎng)站上Messages示例的定制視圖。

          public class MessagesView extends AbstractHtmlView { 
          protected void toolbar(TableModel model) {
          TwoColumnTableLayout toolbar = new MessagesToolbar();
          toolbar.layout(getHtmlBuilder(), model);
          }

          protected void statusBar(TableModel model) {
          TwoColumnRowLayout statusBar = new MessagesStatusBar();
          statusBar.layout(getHtmlBuilder(), model);
          }
          }

          這里使用的是默認(rèn)視圖,因此它擴(kuò)展了虛擬視圖來(lái)修改工具條和狀態(tài)條。如何修改工具條和(或)狀態(tài)條也是開(kāi)發(fā)人員問(wèn)的最多問(wèn)題。

          默認(rèn)視圖的工具條位于表的上方包括翻頁(yè)鏈接和標(biāo)題。工具條使用TwoColumnTableLayout,它是一個(gè)用于提供在自己表中實(shí)現(xiàn)左右兩列布局的虛擬類。 它將實(shí)現(xiàn)能夠浮在表上方的完美布局。下面就是你需要關(guān)心的虛擬方法,在實(shí)際的html視圖中已經(jīng)為你完成了這個(gè)布局。

          public abstract class TwoColumnTableLayout {
          protected abstract boolean showLayout(TableModel model);
          protected abstract void columnLeft(HtmlBuilder html, TableModel model);
          protected abstract void columnRight(HtmlBuilder html, TableModel model);
          }

          showLayout()方法用來(lái)阻止或?qū)е虏季值恼宫F(xiàn)。在我的定制視圖中如果翻頁(yè)或(和)導(dǎo)出顯示那么工具條將展現(xiàn)。

          protected boolean showLayout(TableModel model) {
          boolean showPagination = BuilderUtils.showPagination(model);
          boolean showExports = BuilderUtils.showExports(model);
          if (!showPagination && !showExports) {
          return false;
          }

          return true;
          }

          下面顯示了左列和右列的部分代碼。注意在我的定制視圖中首頁(yè)和前一頁(yè)使用了文字來(lái)替代圖片顯示。我真正希望示范的是你需要做的:找到正確的構(gòu)造器類并且僅僅是擴(kuò)展HtmlBuilder的標(biāo)簽。 構(gòu)造器類對(duì)于示范如何找到模型里的信息(以便你能夠做比他們能夠提供的更多的定制工作)也非常有用,。

          protected void columnLeft(HtmlBuilder html, TableModel model) {
          html.td(2).close();
          TableBuilder.title(html, model);
          html.tdEnd();
          }

          protected void columnRight(HtmlBuilder html, TableModel model) {
          boolean showPagination = BuilderUtils.showPagination(model);
          ...
          if (showPagination) {
          html.td(4).close();
          ToolbarBuilder.firstPageItemAsText(html, model);
          html.tdEnd();

          html.td(4).close();
          ToolbarBuilder.prevPageItemAsText(html, model);
          html.tdEnd();
          ...
          }
          ...
          }

          為了使用這個(gè)視圖你需要在Preferences定義一個(gè)別名。 你可以省略這部而在JSP直接給出這個(gè)視圖的完整有效的類名,不過(guò)Preferences更為簡(jiǎn)潔。

          table.view.messages=org.extremesite.view.MessagesView

          TableTag也將設(shè)置視圖屬性來(lái)使用MessagesView視圖。

          <ec:table view="messages">

          如果不清楚Preferences和TableTag定義語(yǔ)法請(qǐng)參考Preferences指南。

          posted on 2006-02-17 10:36 Lucky 閱讀(605) 評(píng)論(0)  編輯  收藏 所屬分類: extremeComponents

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

          導(dǎo)航

          隨筆分類(125)

          文章分類(5)

          日本語(yǔ)

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          主站蜘蛛池模板: 磐安县| 青岛市| 顺平县| 泾阳县| 丰城市| 葵青区| 兴山县| 鄯善县| 高邮市| 大竹县| 连州市| 古蔺县| 遵化市| 铜梁县| 长寿区| 西林县| 拜泉县| 教育| 都匀市| 确山县| 印江| 鄄城县| 德惠市| 万源市| 鄂伦春自治旗| 栾川县| 新源县| 新昌县| 南雄市| 城固县| 南投县| 长子县| 盐城市| 中牟县| 孝昌县| 汉寿县| 龙门县| 舞钢市| 阜南县| 阳江市| 贵溪市|