DisplayTag Tutorial by XXX

   寫點兒東西真不容易,暫時寫了這麼些,先貼於此。
[b]DisplayTag Tutorial by DarrenWang[/b]
                   CopyRight June,2004:em510:
                   By DarrenWang,All Rights Reserved!
[b]【簡介Introduction】[/b]
DisplayTag是一個開源的自定義標籤庫(Custom Tag lib),他提供了直接而有效的格式化web視圖層數據的有效手段。你可以在現在流行的web應用的MVC模式中集成DisplayTag到View層,其提供的強大表格格式化功能一定會令你愛不釋手。或許上面說的有些誇張了,但是DisplayTag在表格的格式化方面表現確實出色,當然,他也只能顯示錶格,視圖層的大部分工作不就是使用表格來格式化數據嘛?!
 好了,讓我們通過圖片來看看他是一個什麼樣子吧!^_^
[img]http://displaytag.sourceforge.net/p_w_picpaths/sample_snapshot.png[/img]
怎麼樣?是不是感覺不錯那?如果答案是肯定的,那麼你一定急着想自己試一試咯?!不要急,下面就讓我們開始我們的DisplayTag之旅。
[b]【Hello DisplayTag】[/b]
既然是一個tutorial,所以,我們不想對像自定義標籤的實現原理等進行解釋,也就是說在此之前,我們假定你已經對自定義標籤有一定的認識,當然,沒有也無所謂,等這篇tutorial完成後,你估計就會了解的差不多了。
 吶,讓我們從最簡單的displaytag的使用開始,就跟你的第一個程序往往是從HelloWorld程序開始一樣。
 先忽略其他的配置問題,我們的JSP文件的源代碼如下:
[img]/user11/darrenwang/upload/2004639261011063.gif[/img]
實際上,除去初始化和數據準備等操作,生成表格的代碼只有一行,那就是:
<display:table name="InfoList">
</display:table>
 而他生成的表格就是這樣的:
[img]/user11/darrenwang/upload/200463927041199.gif[/img]
怎麼樣?是不是很簡單那?簡單的代碼就可以生成如此漂亮的表格,你有理由不用嘛?(因爲使用了Struts的LabelValueBean,所以表格上顯示了原始的title,不用着急,後面我們將會說道如何修改成你所期待的樣子)
[b]【配置configuration】[/b]
Ok,在我們運用DisplayTag之前,我們需要對他的使用環境進行一些配置,或許有些複雜,但是,如果你是一個WebApp老手的話,其實並不難。
 當然,在此之前,我們需要下載DisplayTag,當前的最新版本是displaytag-1.0-b3。你可以去SourceForge下載它,下載網址是:[url]http://displaytag.sourceforge.net/download.html[/url]
 2.1 DisplayTag的類庫,依賴庫和TLD文件的添加
 解壓下載下來的displaytag的壓縮包,之後依次拷貝displaytag-1.0-b3.jar和lib目錄下面的所有jar文件到你自己的WEBAPP_HOME/WEB-INF/lib目錄下面,拷貝displaytag-11.tld,displaytag-12.tld和displaytag-el-12.tld到WEBAPP_HOME/WEB-INF目錄下面。
 他的依賴庫包括:commons-beanutils,commons-collections,commons-lang以及commons-logging。
 這裏需要注意的問題就是,如果你連同Struts一起使用的話,DisplayTag的依賴庫實際上都包括在Struts1.1的發佈包中,你只需要將displaytag-1.0-b3.jar文件拷貝到你自己的WEBAPP_HOME/WEB-INF/lib目錄下面就可以了。
 另外一個重要的問題就是,如果你的Struts1.1發佈包中的commons lang包不是2.0版本或者更高版本的話,需要去Apache的Jakarta commons項目主頁上下載2.0版本的commons-lang類庫,並替換掉原來的commons-lang類庫,否則,運行的時候將報錯誤並不能運行。
 2.2 web.xml的配置
 要使用DisplayTag提供的自定義標籤,跟其他自定義標籤的使用沒有什麼兩樣,同樣,需要在web.xml文件中註冊taglib,下面是筆者的web.xml文件中taglib註冊的片斷:
<taglib>
    <taglib-uri>[url]http://displaytag.sf.net</taglib-uri>[/url]
    <taglib-location>/WEB-INF/displaytag-11.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>[url]http://displaytag.sf.net</taglib-uri>[/url]
    <taglib-location>/WEB-INF/displaytag-12.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>[url]http://displaytag.sf.net/el</taglib-uri>[/url]
    <taglib-location>/WEB-INF/displaytag-el-12.tld</taglib-location>
  </taglib>
 在這裏有必要說明一下這三個tld之間的區別,這其實在DisplayTag的官方網站上有提到,這裏只是重複一下:displaytag-11.tld 只是提供對JSP1.1規範的的支持,而displaytag-12.tld則提供了對JSP1.2規範的支持,最後的displaytag-el-12.tld除了提供跟displaytag-12.tld提供的特性之外,他提供對Expression Lanuage的支持。所以,爲了在web應用移植於不同的app server的時候可以更少的修改文件,這裏將所有的tld都添加在這裏以便使用。
 配置完成taglib後,下面是可選擇的配置項,如果你不需要的話,可以不進行配置,但建議還是配置他們爲好。
 第一幅圖中可以看到diaplaytag提供了數據的導出功能,如果說你的Table存在的頁面被include在另一個頁面中,比如如果你使用Struts的話,那麼Tiles的使用就是這種情況,那麼你需要爲web.xml中添加filter,以便數據到處功能能夠工作正常。
 首先,在web.xml中添加以下filter配置項(按照web.xml文件中各個elements的順序規定,需要將<filter>元素添加在<servlet>前面,以下類似的情況請參考web.xml規範):
 <filter>
<filter-name>ResponseOverrideFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
 其次,添加filter的映射:
 <filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ResponseOverrideFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
 這樣,對於web.xml的配置基本就完成了。對於I18N在web.xml文件中進行配置的手段,將在後面提到,不歸入此類。
 2.3屬性文件的配置(displaytag.properties)
 DisplayTag提供了一個屬性文件(displaytag.properties)來定義表格顯示的時候提供的信息,比如分頁顯示或者導出數據等的提示信息等,但是因爲這個屬性文件默認的文件隨jar文件一起發佈而且是英文的,所以,我們需要對其進行定製以滿足中文或者其他平臺下的使用。
 要對這個屬性文件進行定製,有三種途徑:
 【1】使用<display:setProperty>標籤,這個標籤可以對單個的屬性進行設置,也就是說如果要對整個的應用頁面都進行定製的話,需要每個頁面都使用這個標籤並對每一個要定製的屬性都使用它,這很明顯不是太行得通,所以,displaytag還提供了下面得途徑;
 【2】使用DisplayPropertiesLoaderServlet來初始化環境,這種方式方式可以對整個應用的屬性進行定製,但是,筆者使用這種方式的時候報錯,不過,還是將其在web.xml文件中的配置項列於此:
<servlet id="DisplayPropertiesLoaderServlet">
    <servlet-name>DisplayPropertiesLoaderServlet</servlet-name>
    <display-name>DisplayPropertiesLoaderServlet</display-name>
    <description>displaytag initialization servlet</description>
<servlet-class>org.displaytag.properties.DisplayPropertiesLoaderServlet</servlet-class>
    <init-param>
      <param-name>properties.filename</param-name>
      <param-value>/WEB-INF/displaytag.properties</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
 這種方法也是讀取diaplaytag.properties中的屬性配置對整個應該環境進行定製。
 最後,也就是就第三中方式,也是筆者最常用的方式,那就是:
 【3】新建一個diaplaytag.properties屬性文件,向該文件中添加需要覆蓋的或者需要另外定製的屬性(具體有那些屬性,DisplayTag網站提供了一個PDF格式的manual,上面有所有可以使用的屬性的列表,因爲太長,所以這裏不作羅列)。這個文件的一個樣本筆者將在後面的實例部分進行羅列。在準備好屬性文件後,將其放到WEBAPP_HOME/WEB-INF/classes目錄下面就可以了。我想這也比其他方式方便的多,另外,這種方式也是針對整個的WEB應用進行定製。
 以上就是配置文件的三種配置方式,第一種只能對單個屬性單個頁面進行,而後面兩種方式可以針對整個的web應用,尤其是第三種方式,筆者尤其倡導。
 2.4 CSS和img的移植
 如果說你試着將頁面中的這一句去掉的話:
<link rel="stylesheet" href="<%=request.getContextPath()%>/css/screen.css" type="text/css" media="screen, print" />,或許你會看到不想看到的景象,或者說你看到的表格將與你所期待的大相徑庭:
[img]/user11/darrenwang/upload/2004639444276758.gif[/img]
怎麼樣?與上面的簡單實例相比,是不是淡色不少?!所以,要使得Displaytag提供最好的顯示效果,或者說要顯示正常,我們不但要保證服務器端的配置,同樣的也要保證視圖層的配置,比如說CSS和Images。
 故此,建議將下載的壓縮包中的diaplaytag.war文件包中的css目錄和img目錄拷貝到你當前工作的WEBApp的根目錄下面,這樣,就可以避免以上的事情發生。當然,這只是可以正常顯示的必要條件,像上面那樣,如果頁面中不引入css的話,同樣會顯示不正常。
 至此,你的Displaytag的配置就算完成了。怎麼樣?是不是有些繁瑣那?!不過不用擔心,與它所帶給你的便捷和強大的功能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章