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

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

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

    隨筆-57  評論-202  文章-17  trackbacks-0
          我在JSP頁面中,當處理<a href></a>時,經常不用<html:link/>的方式處理,而是用下面這樣的方式處理:
          <a href="foo.do?param1=<bean:write name="n1" property="p1"/>&param2=<bean:write name="n2" property="p2"/>">Test</a>
          這樣在處理多個參數時,就不需要先放到一個Collection中。按照<html:link/>的多個參數的處理方法去做,有時確實是很繁瑣。不過這樣帶來一個新的問題,在處理中文參數值時,這樣就行不通了。用request.getParameter("param1")獲取的中文,在中文的個數為奇數個時,就會顯示不正確。例如“三個字”在getParameter中獲取的值是“三個?”。
          這個問題是由于<bean:write />沒有用URLEncoder的encode方法處理值,因為<bean:write />主要是用來在頁面上顯示bean的信息,并不是用在鏈接中當作參數的值。這個問題可以通過給<bean:write />增加新的屬性來解決。
          從Struts的網站上下載Struts 1.2.4的源代碼:http://apache.freelamp.com/struts/source/jakarta-struts-1.2.4-src.zip
          解壓到本地目錄,然后修改文件jakarta-struts-1.2.4-src\src\share\org\apache\struts\taglib\bean\WriteTag.java。新增一個屬性charset,表示需要用什么編碼進行編碼。代碼片斷如下:

        /**
         * Added by George Hill, the string value charset to encoding.
         * 05/19/2005
         
    */

        
    protected String charset = null;

        
    public String getCharset() {
            
    return (this.charset);
        }


        
    public void setCharset(String charset) {
            
    this.charset = charset;
        }

          修改方法formatValue,把這段


            
    if (value instanceof java.lang.String) {
                    
    return (String) value;
            }
     else {

            }


          替換為:


            
    if (value instanceof java.lang.String) {
                
    if (charset != null && charset.length() != 0)
                    
    return TagUtils.getInstance().encodeURL((String) value, charset);
                
    else
                    
    return (String) value;
            }
     else {

            }


          保存修改后的文件。然后需要修改文件jakarta-struts-1.2.4-src\doc\userGuide\struts-bean.xml。這個文件在ant編譯時會變成strtus-bean.tld文件。在tag write后面增加一個attribute,如下所示:


      
    <tag>
        
    <name>write</name>

        
    <attribute>
          
    <name>charset</name>
          
    <required>false</required>
          
    <rtexprvalue>true</rtexprvalue>
          
    <info>
          
    <p>Added by George Hill, use this charset to encoding the value.</p>
          
    </info>
        
    </attribute>

      
    </tag>

          然后修改一下ant的編譯配置文件build.xml,有幾個部分需要修改:
          1.屬性catalina.home需要修改成你安裝的tomcat的目錄;
          2.compile.classpath需要修改,把jar文件的路徑指向正確;
          3.prepare.library taget部分的copy,把相關的jar文件的路徑指向正確。
          運行ant,編譯后的jar文件保存在jakarta-struts-1.2.4-src\target\library目錄中,把原來的struts.jar和struts-bean.tld文件替換掉,就可以用自定義的<bean:write /> tag了。如果不寫charset屬性,那么和原來的<bean:write />處理是一樣的。
          這樣,類似于下面的鏈接地址:
          <a href="foo.do?param1=<bean:write name="n1" property="p1"/>&param2=<bean:write name="n2" property="p2"/>">Test</a>
          就可以修改成:
          <a href="foo.do?param1=<bean:write name="n1" property="p1" charset="UTF-8"/>&param2=<bean:write name="n2" property="p2" charset="UTF-8"/>">Test</a>
          在request.getParameter("param1")中將會獲得正確的中文值。
          對于struts 1.1,程序又稍微有些不同。我將在下一篇隨筆中介紹。
    posted on 2005-05-20 00:50 小米 閱讀(2089) 評論(5)  編輯  收藏 所屬分類: Struts

    評論:
    # re: 用URLEncoder輸出&lt;bean:write /&gt的值 2005-05-20 11:18 | Dennis
    雖然老實說... struts tag 的設計真的很差...
    其實要應用類似 jsp:forward 的 jsp:param
    加上 html:linkParam 才對

    但, 以你這個例子, 肯定是用 html:link 會比較好

    1. foo.do 是一個 struts action, 而它的 path 和 .do 是可能轉換的

    2.事實上, 可應用 EL 是可以完全替代 bean:write 的
    寫一個 EL function 來作 escape 會比較簡單
    也不必改動 struts 的 source code

    或根本放在 bean 中的 properties 就已經是 escape 了的 string

    3. 不滿意 struts 的 taglib, 可以轉用其他(e.g. jstl)
    或 extends 它, 甚至自行寫一套也可以...
    以 patch 的想法, 改動小許 source 的做法, 會引起相容性問題.

    例如 copy bean.tld 為 mybean.tld
    也 extends org.apache.struts.taglib.bean.WriteTag
      回復  更多評論
      
    # re: 用URLEncoder輸出&lt;bean:write /&gt的值 2005-05-20 11:31 | 小米
    確實,struts在View這一層做的相當不好,設計人員沒有很好的考慮實際開發人員是否方便使用。我一般也是迫不得以才考慮修改struts的源代碼,因為如果隨便修改源代碼的話,在團隊開發中會帶來很大的麻煩,自己還需要維護一套struts的代碼。
    我也在考慮著在View這一層不使用struts的實現。多謝你的指教。  回復  更多評論
      
    # re: 用URLEncoder輸出&lt;bean:write /&gt的值[未登錄] 2008-06-03 11:40 | aaa
    aaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaaaaaa
    aaaaaaaaaa  回復  更多評論
      
    # re: 用URLEncoder輸出&lt;bean:write /&gt的值[未登錄] 2008-06-03 11:40 | aaa
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  回復  更多評論
      
    # re: 用URLEncoder輸出&lt;bean:write /&gt的值[未登錄] 2008-06-03 11:44 | aaa
    臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍臥虎藏龍  回復  更多評論
      
    主站蜘蛛池模板: 久久永久免费人妻精品下载| 午夜不卡AV免费| 亚洲风情亚Aⅴ在线发布| 校园亚洲春色另类小说合集| 人体大胆做受免费视频| 成全视频在线观看免费| 91频在线观看免费大全| 日韩高清免费在线观看| 国产亚洲色视频在线| 日韩精品一区二区亚洲AV观看| 亚洲娇小性xxxx色| 色屁屁在线观看视频免费| a级毛片高清免费视频就| 亚洲啪啪免费视频| 国产伦精品一区二区三区免费迷| 亚洲日韩国产成网在线观看| 久久亚洲精品成人av无码网站| 亚洲第一区二区快射影院| 国产精品免费视频观看拍拍| 37pao成人国产永久免费视频| 青青青国产免费一夜七次郎 | 久久青草精品38国产免费| 欧亚精品一区三区免费| 亚洲精品无码av天堂| 亚洲高清日韩精品第一区| 大桥未久亚洲无av码在线| 国偷自产一区二区免费视频| 久久久久国色AV免费观看性色 | 亚洲偷自拍拍综合网| 噜噜噜亚洲色成人网站∨| 边摸边吃奶边做爽免费视频网站 | 亚洲短视频在线观看| 国产a不卡片精品免费观看| 亚洲综合亚洲综合网成人| 亚洲成a人片毛片在线| 男女猛烈无遮掩视频免费软件| 97在线视频免费| 亚洲麻豆精品国偷自产在线91| 亚洲大香人伊一本线| 中文永久免费观看网站| 午夜a级成人免费毛片|