今天做一個項目,遇到了兩個問題,就是在URL中傳遞數組與url的中文亂碼。
1、如數組String[] roleIds = (String[]) ((DynaActionForm) form).get("roleIds");
即從動態Form表單中得到一個數組,要將其做爲條件加入到url中,
如已有條件爲:condition = "&loginName="+loginName;
若直接寫:condition +="roleIds="+roleIds;是肯定不對的,因爲這樣把roleIds數組做爲了它的成員.
若寫爲:condition += "roleIds="+roleIds[0];則會知道只把此數組的第一個值傳給了roleIds,但通過這我們可以想到,是否可以將數組拆分一下,將每個數據都加入Url中呢?答案是可以的。
如可以這樣寫:
//將數組傳入url中
if(roleIds != null){
for(int i = 0; i< roleIds.length; i++){
SearchCondition += "&roleIds="+roleIds[i];
}
這樣就把此數組加入到了url中。
2、中文亂碼可以通過編解碼來處理。
如userName是中文,
String userName = "我是中文";
將其加入url中作爲搜索條件,則需要先編碼:
condition +="&userName="+java.net.URLEncoder.encode(userName,"GB2312");
當通過request得到userName時,再通過解碼得到中文:
String userName = request.getParameter("userName");
userName = java.net.URLDecoder.decode(userName,"GB2312");
需要注意的是:encode與decode的字符編碼也相同,如都爲:GB2312。且要與容器的編碼同。
如:若容器是使用tomcat,則需修改其server.xml文件,在
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
中加入URIEncoding="GB2312"
URIEncoding的編碼與你編解碼時的字符編碼同,若爲gb2312則都是gb2312,若爲gbk,都爲gbk。