DisplayTag的默認的URL為上一次的URL,而上一次的URL中包含被編碼后的漢字,所以,將編碼后的漢字再次進行編碼,肯定查不到結(jié)果,所以也不能翻頁,看來要修改DisplayTag了,本來想年后再弄的......
DisplayTag的默認的URL默認為上一次的URL,如果上一次的URL包含中文的話,則會被進行URLEncode,所以在翻頁的時候,又會把進行了URLEncode后的數(shù)據(jù)再次進行URLEncode,所以翻頁就沒有數(shù)據(jù),因為這部分功能被封裝在DisplayTag中,于是,我又開始郁悶了......
如漢字"專業(yè)"被編碼后為"%D7%A8%D2%B5",于是DisplayTag就將這個編碼作為連接的關(guān)鍵字,如果再次提交,則這個編碼還會被編碼,所以查詢結(jié)果一定就不對了!??!
下面的內(nèi)容是我分析這個問題的由來:
---------------------------------------------------------------------------------------------------
剛才到網(wǎng)上查找了些資料,找到HTML4.0.1的規(guī)范中關(guān)于URLEncode的部分,我把我關(guān)心的內(nèi)容翻譯了一下:
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
其中相關(guān)內(nèi)容如下在17.13.3 Processing form data:
提交時,HTML的規(guī)范處理如下:
1.標識successful controls (概念可以在上文中查找)。
2.構(gòu)建form的數(shù)據(jù)集。
3.根據(jù)form的enctype的設(shè)置,對form的數(shù)據(jù)集進行Encode。
4.提交已經(jīng)Encode的數(shù)據(jù)集。
HTML規(guī)范中指出Content type和Languange code是不區(qū)分大小寫的。
詳情參見:http://www.w3.org/TR/html401/types.html#type-content-type
"&" 表示"&"。關(guān)于charset的詳細內(nèi)容見:http://www.w3.org/TR/html401/charset.html#entities
有一個小發(fā)現(xiàn):Frame中的target的值的列表原來是在HTML的規(guī)范中制定的,呵呵:
下面的target的名字是規(guī)范中聲明的有特殊含義的保留字。
_blank 在一個沒有指定名字的新窗口中打開頁面。(new, unnamed window)
_self 在同一個窗口中打開。(load the document in the same frame as the element that refers to this target)
_parent 在當(dāng)前窗口的父窗口中打開,如果當(dāng)前窗口沒有父窗口,那么就等同于_self
_top 在最開始的窗口中轉(zhuǎn)載,如果當(dāng)前框架沒有parent,那就等于_self。
form的默認的content type是:application/x-www-form-urlencoded
form提交content type的數(shù)據(jù)必須用下列規(guī)則進行編碼(encode):
空格被封裝為"+",其他的保留字封裝后的值在 [RFC1738]中可以查到。RF1738的規(guī)范:http://www.ietf.org/rfc/rfc1738.txt。
其他的非英文字符和非數(shù)字的字符都被編碼為"%HH",
HH是將字符的ASCII的編碼轉(zhuǎn)換為16進制后的字符。行尾是"CR LF" (如:`%0D%0A')。
控件的名字和數(shù)值之間使用"="分隔,多個控件之間用"&"分隔。
------------------------------------------------------------------------------------------------------------------
兔八哥
2005-2-2下午
|