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

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

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

    Believe it,do it!

    Ideal is the beacon. Without ideal, there is no secure direction; without direction ,there is no life.
    理想是指路明燈。沒有理想,就沒有堅定的方向;沒有方向,就沒有生活。
    CTRL+T eclipse
    posts - 35, comments - 3, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Display Tag使用小記收藏

    Posted on 2008-09-27 15:03 三羽 閱讀(424) 評論(0)  編輯  收藏 所屬分類: 收 藏 夾
        Display Tag Lib是一個標簽庫,用來處理jsp網頁上的Table,功能非常強,可以對的Table進行分頁、數據導出、分組、對列排序等等,反正我在做項目時需要的功能它都給我提供了,而且使用起來非常的方便。能夠大大減少代碼量。
        介個是Display Tag的官方網站http://displaytag.sourceforge.net/。

        首先當然是要下載它的jar包了,這里可以下載到最新的版本。將jar包放到WEB-INF的lib文件夾下。另外還需要兩個輔助包:apache的commons-lang和standard包,更多的輔助包可以在這里下載

        在web.xml下添加一個filter
        <filter>
            <filter-name>exportFilter</filter-name>
            <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
        </filter>

        在jsp頁面做一個引用:
    <%@ taglib uri="http://displaytag.sf.net/el" prefix="display" %>

        首先我們定義一個list
    <%
     List test = new ArrayList( 6 );
     test.add( "Test String 1" );
     test.add( "Test String 2" );
     test.add( "Test String 3" );
     test.add( "Test String 4" );
     test.add( "Test String 5" );
     test.add( "Test String 6" );
     request.setAttribute( "test", test );
    %>

        當我們想在jsp頁面上顯示這個list時,我們只需要寫一句話
        <display:table name="test" />
        display tag會自動生成一個table

        如果list是從控制層拋出來的,name可使用EL表達式表示
        <display:table name="${test}" />

        這是最簡單的display tag的使用,我們可以給它加上樣式等,也可以定義顯示的列,下面的table顯示復雜一些
    <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0">
      <display:column property="id" title="ID" class="idcol"/>
      <display:column property="name" />
      <display:column property="email" />
      <display:column property="description" title="Comments"/>
    </display:table>

        如果想要給它加個鏈接也很簡單,下面的代碼給name加了連接,并附帶id參數,email也自動連接到mailto:XXX
    <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0">
      <display:column property="id" title="ID" class="idcol"/>
      <display:column property="name" url="detail.jsp" paramId="id" paramProperty="id"/>
      <display:column property="email" autolink="true"/>
      <display:column property="description" title="Comments"/>
    </display:table>

    下面介紹幾個Display最常用的功能,更多功能請參考http://displaytag.homeip.net/displaytag-examples-1.1/。
    1. 分頁
        如果想對代碼分頁,只需在display:table標簽中添加一項pagesize="每頁顯示行數",如
    <display:table name="test" pagesize="10"/>

    2. 對列排序
        display tag可對列進行排序,就是點擊列名,對該列的數據進行排序。你只需對想要排序的列添加 sort="true" 就OK,如下面的代碼可對前三列進行排序。在display:table中添加defaultsort="列數",可默認對指定的列排序。
    <display:table name="test" styleClass="list" cellspacing="0" cellpadding="0" defaultsort="1">
      <display:column property="id" title="ID" class="idcol" sort="true"/>
      <display:column property="name" url="detail.jsp" paramId="id" paramProperty="id" sort="true"/>
      <display:column property="email" autolink="true" sort="true"/>
      <display:column property="description" title="Comments"/>
    </display:table>
       如果table有分頁,Display Tag默認只對當前頁進行排序,如果想對整個list排序,可以在display:table之間添加一段代碼:
    <display:setProperty name="sort.amount" value="list"/>

    3. 導出數據
        在display:table中添加export="true",看看會出現什么!Display Tag默認會提供三種數據導出方式:CSV、Excel、XML 。
        另外Display Tag還可以導出為PDF格式,在http://prdownloads.sourceforge.net/itext/下載一個輔助包iText.jar,copy到lib目錄下,然后在display:table之間添加一段代碼:
    <display:setProperty name="export.pdf" value="true"/>,大功告成。

    4. Display Tag的屬性設置
        前面所說的display:setProperty 是一種改變Display Tag屬性的方法,但是在每個jsp中都要寫太麻煩了。
        Display Tag中設置了很多默認的屬性,它有一個專門的屬性文件,是在它的jar包中的displaytag/properties/TableTag.properties
        想要改變它的默認屬性,我們可以在WEB-INF\classes下新建一個文件displaytag.properties,仿照TableTag.properties中屬性的格式設置需要修改的屬性。
        TableTag.properties中的# messages中設置的是顯示在頁面上的提示信息。默認是英文的,我們可以把它改為中文的。不過這里只能使用unicode,就是說中文字符必須轉換為unicode碼,這個可以使用jdk自帶的native2ascii.exe進行轉換。

    5. 其它功能
        DisplayTag還有一些很實用的小功能,這里提兩個。一個是對數據的Format,這是1.1版本添加的新功能,可以使用標簽的方式格式化時間、數字、字符串。比如日期,在需要格式化的column標簽中添加format="{0,date,yyyy-MM-dd}",第一個參數為格式化的數據序號,第二個參數是數據類型,數字為number,第三個參數為數據格式。
        另外一個功能是對table數據的合計功能。在table標簽中添加 decorator="org.displaytag.decorator.TotalTableDecorator",然后在想要進行合計的數據列的column標簽中添加 total="true",該列就可以被計算總數了。但這個功能有個缺點,不能用在有分頁的時候,它只能合計第一頁的數據。

    DisplayTag的不足
        初次使用DisplayTag的人可能會覺得驚喜,但是用久了會發現很多問題,最大的問題是對中文的支持不好,比如如果查詢條件中有中文,就無法翻頁,無法對中文排序,將中文導出為指定文件時出現亂碼等等。這些問題有時候會讓人很郁悶,有時候逼得你要去修改它的源代碼。下面是對以上幾個問題的解決方法:
        1. 對于中文無法翻頁、排序,最簡單的辦法是修改Tomcat下的server.xml文件。找到HTTP的Connector標簽,在里面添加一項URIEncoding="...",引號里面的內容取決于你的頁面編碼,比如可以是GBK,UTF8等。這樣上面兩個問題就可以解決了。
        2. 導出為文件:其實這個功能除了中文支持外還有很多其它問題,比如它會將Html標簽一起導出、只導出顯示的內容,但如果對table進行了decorator,decorator后的內容無法導出。如果想要將中文正確導出,需要修改DisplayTag源代碼。
        下載相同版本的源代碼,在org.displaytag.export.ExcelView.java文件中找到getMimeType()方法,將此方法修改為 return "application/vnd.ms-excel;charset=GB2312";,修改后導出數據的速度會慢很多,不過將就吧。
        3. 新版的DisplayTag1.1添加了對一次取部分數據的支持,相關的標簽包括partialList和size,需要設置partialList="true"和size的大小。具體怎么用偶還沒研究。

    亂碼解決:

    tomcat/jboss   修改server.xml

    <Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />


    .整合tomcat和apache后的設置
        剛開始我沒有整合的時候傳遞的中文參數可以很好的解決,后來整合apache后,卻出現亂碼了,繞過apache后是正常的,所以問題出現在apache或apache和tomcat的通信上,經過baidu,好不容易找到答案。修改server.xml文件中的如下行:

      這出現apache和tomcat的通信上,由于我這里的整合是采用JK,tomcat使用的是ajp13協議,所以,需要在他們的通信階段來處理編碼,即代碼中的URIEncoding="UTF-8"部分。
     
    websphere 
    “服務器”-->應用程序服務器,找到自己應用使用的服務器。
    WS6有不同,注意。
    找到“服務器基礎結構”,展開其下的“Java 和進程管理”,然后進入“進程定義”。
    進入后找到“其它屬性”-->“Java 虛擬機”:
    將“Java 虛擬機”通用 JVM 參數 設置為:-Dfile.encoding=GBK

    weblogic

    【關鍵字】 Tomcat容器 中文 字符編碼 亂碼 Weblogic容器 服務器
    【正文】因為編碼方式的不同在使用Tomcat容器時會出現提交到Servlet的中文是亂碼的方式,而且Tomcat5.x對于POST和GET的方式處理似乎還有不同,POST方式是采用Filter的方式即可,怎樣能夠處理GET方式中文提交亂碼的問題呢?
     可以采用配置服務器字符編碼的方法,具體操作如下:
    1、打開Tomcat安裝目錄中的conf目錄
    2、修改server.xml中的connector一個子項,具體可能類似如下:

    <Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />

    在其中添加URIEncoding="GBK" ,或者是其他的編碼方式,變成如下:

    <Connector port="8001" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

    3、停止Tomcat服務,重新啟動Tomcat服務即可。

    【另附Weblogic容器處理編碼的方式】

    處理Weblogic容器的編碼比較簡單,只需要在站點的web.xml中配置一行如下的代碼即可。

    <context-param> <param-name>weblogic.httpd.inputCharset./*</param-name> <param-value>GBK</param-value> </context-param>

    【另附Tomcat處理POST提交亂碼的方式】

    1、首先在web.xml中配置過濾器

    <filter> <filter-name>SetCharacterEncodingFilter</filter-name> <filter-class> cn.cublog.jedliu.SetCharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter>


    <filter-mapping> <filter-name>SetCharacterEncodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>

    2、在cn.cublog.jedliu包中SetCharacterEncodingFilter是用于來實現編碼的過濾器。

    public class SetCharacterEncodingFilter implements Filter {
        protected String encoding = null;
        protected FilterConfig filterConfig = null;
        protected boolean ignore = true;
        public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
        }
        public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)
        throws IOException, ServletException {
            if (ignore || (request.getCharacterEncoding() == null)) {
                String encoding = selectEncoding(request);
                if (encoding != null)
                    request.setCharacterEncoding(encoding);
            }
            chain.doFilter(request, response);
        }

        public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;
            this.encoding = filterConfig.getInitParameter("encoding");
            String value = filterConfig.getInitParameter("ignore");
            if (value == null)
                this.ignore = true;
            else if (value.equalsIgnoreCase("true"))
                this.ignore = true;
            else if (value.equalsIgnoreCase("yes"))
                this.ignore = true;
            else
                this.ignore = false;
        }
        protected String selectEncoding(ServletRequest request) {
            return (this.encoding);
        }
    }

    主站蜘蛛池模板: 最近免费2019中文字幕大全| 午夜亚洲WWW湿好爽| 久久亚洲国产中v天仙www| 亚洲女人被黑人巨大进入| 深夜国产福利99亚洲视频| 青青草国产免费国产是公开| 亚洲精品GV天堂无码男同| 亚洲砖码砖专无区2023| 亚洲熟妇久久精品| 亚洲综合一区无码精品| 亚洲愉拍一区二区三区| 亚洲午夜福利在线视频| 亚洲色大成网站www尤物| 亚洲精品无码久久久久APP| 国产亚洲精品免费| 国产午夜亚洲精品不卡| 黄网站色视频免费看无下截| 四虎精品成人免费视频| 国产亚洲中文日本不卡二区 | 一区二区免费在线观看| 色吊丝性永久免费看码| 香蕉免费看一区二区三区| 热久久这里是精品6免费观看| 鲁丝片一区二区三区免费| 亚欧日韩毛片在线看免费网站| 最近2019免费中文字幕6| 久久午夜免费视频| 看全色黄大色大片免费久久| 暖暖免费高清日本中文| 又黄又爽又成人免费视频| 男人的好看免费观看在线视频| 四虎www免费人成| 免费人成网站7777视频| 精品久久免费视频| 亚洲AV无码成人精品区大在线| 国产成人精品日本亚洲专区| 免费乱码中文字幕网站| 中文字幕不卡亚洲| 免费v片在线观看| 亚洲成a人片在线观看无码专区| 亚洲综合激情九月婷婷|