欢迎来到小米的博客
希望能和您交流Java编程的知识和见解
BlogJava
首页
新随笔
联系
聚合
管理
随笔-57 评论-202 文章-17 trackbacks-0
用URLEncoder输出<bean:write />的值
我在JSP页面中,当处理<a href></a>时,经常不用<html:link/>的方式处理,而是用下面这样的方式处理:
<a href="foo.do?param1=<bean:write name="n1" property="p1"/>¶m2=<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"/>¶m2=<bean:write name="n2" property="p2"/>">Test</a>
就可以修改成:
<a href="foo.do?param1=<bean:write name="n1" property="p1" charset="UTF-8"/>¶m2=<bean:write name="n2" property="p2" charset="UTF-8"/>">Test</a>
在request.getParameter("param1")中将会获得正确的中文值。
对于struts 1.1,程序又稍微有些不同。我将在下一篇随笔中介绍。
posted on 2005-05-20 00:50
小米
阅读(2073)
评论(5)
编辑
收藏
所属分类:
Struts
评论:
#
re: 用URLEncoder输出<bean:write />的值 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输出<bean:write />的值 2005-05-20 11:31 |
小米
确实,struts在View这一层做的相当不好,设计人员没有很好的考虑实际开发人员是否方便使用。我一般也是迫不得以才考虑修改struts的源代码,因为如果随便修改源代码的话,在团队开发中会带来很大的麻烦,自己还需要维护一套struts的代码。
我也在考虑着在View这一层不使用struts的实现。多谢你的指教。
回复
更多评论
#
re: 用URLEncoder输出<bean:write />的值[未登录] 2008-06-03 11:40 |
aaa
aaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaa
回复
更多评论
#
re: 用URLEncoder输出<bean:write />的值[未登录] 2008-06-03 11:40 |
aaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
回复
更多评论
#
re: 用URLEncoder输出<bean:write />的值[未登录]
2008-06-03 11:44 |
aaa
卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙卧虎藏龙
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
用URLEncoder输出<bean:write />的值(struts1.1版)
用URLEncoder输出<bean:write />的值
Struts的国际化完整解决方案
如何在Struts中实现分页显示数据(2)
如何在Struts中实现分页显示数据(1)
小米,生活在深圳,专注于Java,主要从事数据库和网页编程。现在在学习着Hibernate和Spring。喜欢游戏、音乐和台球。联系方式:georgehill@21cn.com
<
2005年5月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(27)
给我留言
查看公开留言
查看私人留言
随笔分类
Hibernate(15)
Java(17)
Spring(1)
Struts(5)
其它(5)
数据库(2)
生活随笔(12)
随笔档案
2006年4月 (1)
2006年3月 (1)
2005年8月 (1)
2005年7月 (11)
2005年6月 (13)
2005年5月 (30)
文章分类
Eclipse(1)
Java(8)
其它(8)
文章档案
2005年7月 (1)
2005年6月 (13)
2005年5月 (3)
我的朋友们
emu的博客
Java BY
我的链接
Java Research
SUN Java技术中文社区
拯救程序员王俊
搜索
积分与排名
积分 - 232063
排名 - 246
最新评论
1. re: Hibernate的一对一关联实例
根据写了报错了是怎么回事
--33
2. re: 用java.util.Timer定时执行任务
评论内容较长,点击标题查看
--yunp
3. re: Hibernate的一对一关联实例
好样的
--vds
4. re: 如何在Struts中实现分页显示数据(1)
PageData中的集合是所有都取出,还是用多少取多少,若是前者,会拖慢系统的。
--李亚男
5. re: BMP文件格式
评论内容较长,点击标题查看
--见面
阅读排行榜
1. 用java.util.Timer定时执行任务(33717)
2. 用JFreeChart画柱状图的范例(10683)
3. 《深入浅出Hibernate》读书笔记(3)——数据缓存(6096)
4. 《深入浅出Hibernate》读书笔记(8)——Hibernate分页(5533)
5. 用ChartDirector在JSP中画统计图(5235)
评论排行榜
1. 如何在Struts中实现分页显示数据(2)(25)
2. 献出一份爱心 共同援助重病程序员王俊(22)
3. Struts的国际化完整解决方案(11)
4. 2005年6月27日,一个值得纪念的日子(9)
5. 《深入浅出Hibernate》读书笔记(1)——实体对象生命周期(9)