歡迎來到小米的博客
希望能和您交流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
小米
閱讀(2091)
評論(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新聞
Chat2DB
C++博客
博問
管理
相關文章:
用URLEncoder輸出<bean:write />的值(struts1.1版)
用URLEncoder輸出<bean:write />的值
Struts的國際化完整解決方案
如何在Struts中實現分頁顯示數據(2)
如何在Struts中實現分頁顯示數據(1)
小米,生活在深圳,專注于Java,主要從事數據庫和網頁編程?,F在在學習著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技術中文社區
拯救程序員王俊
搜索
積分與排名
積分 - 233172
排名 - 247
最新評論
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定時執行任務(33743)
2.?用JFreeChart畫柱狀圖的范例(10691)
3.?《深入淺出Hibernate》讀書筆記(3)——數據緩存(6108)
4.?《深入淺出Hibernate》讀書筆記(8)——Hibernate分頁(5555)
5.?用ChartDirector在JSP中畫統計圖(5246)
評論排行榜
1.?如何在Struts中實現分頁顯示數據(2)(25)
2.?獻出一份愛心 共同援助重病程序員王俊(22)
3.?Struts的國際化完整解決方案(11)
4.?2005年6月27日,一個值得紀念的日子(9)
5.?《深入淺出Hibernate》讀書筆記(1)——實體對象生命周期(9)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 小米
主站蜘蛛池模板:
永久免费无码网站在线观看个
|
免费无码VA一区二区三区
|
日韩大片免费观看视频播放
|
日本免费人成网ww555在线
|
性xxxx视频播放免费
|
亚洲情综合五月天
|
色欲色欲天天天www亚洲伊
|
99视频精品全部免费观看
|
亚洲AV美女一区二区三区
|
在线观看国产一区亚洲bd
|
一个人看的www在线免费视频
|
4399影视免费观看高清直播
|
久久久久亚洲AV综合波多野结衣
|
成人亚洲国产va天堂
|
国产精成人品日日拍夜夜免费
|
亚洲精品二区国产综合野狼
|
边摸边脱吃奶边高潮视频免费
|
h视频在线观看免费网站
|
国产aⅴ无码专区亚洲av
|
在线播放免费人成视频网站
|
亚洲一区二区三区无码影院
|
亚洲成a人片在线不卡一二三区
|
国产成人yy免费视频
|
亚洲韩国—中文字幕
|
99re6在线精品免费观看
|
亚洲国产精品视频
|
在线91精品亚洲网站精品成人
|
亚洲毛片av日韩av无码
|
亚洲AV成人无码网站
|
国产精品V亚洲精品V日韩精品
|
花蝴蝶免费视频在线观看高清版
|
亚洲国产精品专区在线观看
|
一级特黄录像免费播放肥
|
在线观看亚洲精品福利片
|
xxxxx做受大片在线观看免费
|
婷婷久久久亚洲欧洲日产国码AV
|
日本高清高色视频免费
|
亚洲 欧洲 视频 伦小说
|
精品国产人成亚洲区
|
五月亭亭免费高清在线
|
一级做a爱片特黄在线观看免费看
|