随笔-57  评论-202  文章-17  trackbacks-0
      续上一篇随笔,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了。
posted on 2005-05-20 11:52 小米 阅读(1036) 评论(0)  编辑  收藏 所属分类: Struts

只有注册用户登录后才能发表评论。


网站导航: