js中的代碼:
/*将中文的參數進行兩次編碼 */
function queryByName(){
//擷取查詢條件的使用者名
var queryName=$("#queryName").val();//尚曉飛當當
alert(queryName);
//進行背景跳轉
window.location.href="<%=request.getContextPath() %>/master/sysUser_queryByName.action?queryName="+encodeURI(encodeURI(queryName));
}
java背景的代碼:
public String queryByName() throws UnsupportedEncodingException{
System.out.println("SysUserAction.queryByName()"+queryName);
//這裡用struts2中設定queryName屬性接收前台傳來的參數,然後将該接收參數,進行解碼
String name = java.net.URLDecoder.decode(queryName,"UTF-8");//需要抛異常
System.out.println("SysUserAction.queryByName()"+name);
this.list=sysUserService.querySysUserByName(name);
return "userList";
}
控制台列印結果:
SysUserAction.queryByName()%E5%B0%9A%E6%99%93%E9%A3%9E%E5%BD%93%E5%BD%93
SysUserAction.queryByName()尚曉飛當當
原因:後來網搜資料,發現原來在對背景java程式裡的queryName指派的時候,本身已經使用了一次解碼,不過解碼的結果依然不對。是以我們可以在頁面 上進行兩次編碼操作,這樣背景自動的那次就可以抵消掉一次,然後在使用 searchtext=java.net.URLDecoder.decode(queryName,"UTF-8");/*需要處理異常*/進行一次 解碼就好了