今天做一个项目,遇到了两个问题,就是在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。