用URLEncoder输出的值(struts1.1版)

用URLEncoder输出<bean:write />的值(struts1.1版)
      续上一篇随笔,struts1.2的源代码和struts1.1的源代码有些不同,struts1.1的eoncode方法是用的RequestUtils.encodeURL(String s)处理的,指定用UTF-8进行encoding。所以我的修改有些不同。
      从struts的网站上下载1.1的源代码: http://apache.justdn.org/jakarta/struts/source/jakarta-struts-1.1-src.zip,解压到本地目录。打开文件jakarta-struts-1.1-src\src\share\org\apache\struts\taglib\bean\WriteTag.java,新增一个布尔属性encode,表示是否需要用UTF-8编码输出字符串。代码片断如下:

     /**/ /**
     * The encode flag for the value.
     * Added by George Hill, 05/19/2005
     
*/

    
protected  boolean encode  =   false ;
    
    
public  boolean isEncode()  {
        
return (this.encode);
    }

    
    
public   void  setEncode(boolean encode)  {
        
this.encode = encode;
    }

      修改方法formatValue,把这段:


        
//  Return String object as is.
         if  ( value instanceof java.lang.String )  {
                
return (String)value;
        }
  else   {

        }


      替换成:


        
//  Return String object as is.
         if  ( value instanceof java.lang.String )  {
            
if (encode)
                
return RequestUtils.encodeURL((String)value);
            
else
                
return (String)value;
        }
  else   {

        }


      保存修改后的文件。然后需要修改文件jakarta-struts-1.1-src\doc\userGuide\struts-bean.xml。这个文件在ant编译时会变成strtus-bean.tld文件。在tag write后面增加一个attribute,如下所示:


    
< attribute >
      
< name > encode </ name >
      
< required > false </ required >
      
< rtexprvalue > true </ rtexprvalue >
      
< info >
      
< p > Added by George Hill, specifies the value need UTF-8 encode or not. </ p >
      
</ info >
      
< default > false </ default >
    
</ attribute >

      然后修改一下ant的编译配置文件build.xml,这一部分和上一篇的随笔类似,请参考上篇随笔: <<用URLEncoder输出<bean:write />的值>>。
      运行ant,编译后的jar文件保存在jakarta-struts-1.1-src\target\library目录中,把原来的struts.jar和struts-bean.tld文件替换掉,就可以用自定义的<bean:write /> tag了。

你可能感兴趣的:(用URLEncoder输出的值(struts1.1版))