寫點兒東西真不容易,暫時寫了這麼些,先貼於此。
[b]DisplayTag Tutorial by DarrenWang[/b]
CopyRight June,2004:em510:
By DarrenWang,All Rights Reserved!
[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之旅。
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,不用着急,後面我們將會說道如何修改成你所期待的樣子)
既然是一個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的配置就算完成了。怎麼樣?是不是有些繁瑣那?!不過不用擔心,與它所帶給你的便捷和強大的功能
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的配置就算完成了。怎麼樣?是不是有些繁瑣那?!不過不用擔心,與它所帶給你的便捷和強大的功能