一、window.open() 乱码:
JS中使用window.open("url?param="+paramvalue)传递参数出现乱码,提交的时候,客户端浏览器URL中显示参数是正确的,
但是传到了服务器端是是乱码。这种情况下需要在客户端对该参数进行编码,然后在服务器端解码即可。
1、JS客户端编码:
var selStr=document.getElementsByName('selStr')[0].value;
selStr=encodeURI(encodeURI(selStr));
window.open('printWindow.do?bm=j&selStr='+selStr+'');
注意:编码的时候需要使用两次encodeUri,写一个就是????号,写两个则输出: %4d%5a这种。
2、服务器端解码:
String tempSelStrs=request.getParameter("selStr").toString();
String selStr=java.net.URLDecoder.decode(tempSelStrs,"UTF-8");
二、SpringMVC,在JS用GET方式向后台传参出现乱码:
JS中代码:
//显示我创建的任务
function showTask(){
var str1 = $("#str1").val();
window.location.href="${pageContext.servletContext.contextPath }/workbench/task/query.html?str1="+encodeURI(encodeURI(str1));//GET方式传参
}
后台代码:
@RequestMapping(value = "query", method =RequestMethod.GET)//声明是GET方式传参publicString query(Model model, Task task, String pageNow,String pageSize,
HttpServletRequest request) {try{//解决GET方式传参时参数乱码的问题
if(task.getStr1() != null){
//将Bean中字段取出
task.setStr1(java.net.URLDecoder.decode(task.getStr1(),"UTF-8"));
}//获取登录用户信息
User user = (User) request.getSession().getAttribute("homeUser");
Integer userId= user.getUserId();//获取登录用户ID
task.setUserId(userId);
task.setUserNickName(user.getUserNickname()+";");//登录用户昵称
task.setDoTaskId(String.valueOf(user.getUserId())+";");//登录用户ID//1、获取下拉框数据
Map>> map =taskService.getDropDownData(userId);
model.addAttribute("map", map);if("".equals(task.getStr1()) || task.getStr1()==null){
task.setStr1("可输入任务、执行人查找");
}
model.addAttribute("task", task);
PageView pageView= null;if(Common.isEmpty(pageNow)) {
pageView= new PageView(1);
}else{
pageView= newPageView(Integer.parseInt(pageNow));
}//选择分页条数
if(pageSize!=null){
pageView.setPageSize(Integer.parseInt(pageSize));
model.addAttribute("pageSize", pageSize);
}else{
pageView.setPageSize(10);
model.addAttribute("pageSize", 10);
}//用于查询所有数据
if("可输入任务、执行人查找".equals(task.getStr1())){
task.setMyTask(null);
}else{
task.setMyTask(task.getStr1());
}
pageView=taskService.query(pageView, task);
model.addAttribute("pageView", pageView);
}catch(Exception e) {
e.printStackTrace();
}return Common.ROOT_PATH + "/workbench/task/list";
}