对于重定向的URL拼接可以使用RedirectAttributes类。
其中中文传参问题需要进行两次编码。第一次编码由中文转成数字+字母类型+%,第二次编码变成存数字类型+符号,这样不同的编码都可以相互转换、适用。
注意:使用RedirectAttributes类进行url拼接时,会自动对中文进行一次编码。所以此时只需要再进行一次编码就可以。
@RequestMapping("/agriecomIndex/search/forward")
public String searchForward(@RequestParam(defaultValue = "1")int page, @RequestParam(defaultValue = "20")int limit, String categoryId, String keyword,RedirectAttributes attributes){
try {
keyword=new String(keyword.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(keyword);
try {
keyword=URLEncoder.encode(keyword,"UTF-8");
keyword=URLEncoder.encode(keyword,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "redirect:/search.html?keyword="+keyword+"&categoryId="+categoryId;
// uri=search.html?keyword=氨基&categoryId=5
/* Spring3.1版本封装的addAttribute方法自动帮你拼接url并且转码一次 */
// attributes.addAttribute("keyword",keyword);
// attributes.addAttribute("categoryId",categoryId);
//内部默认进行一次utf-8转码 此时把中文值转为%,数字和字母,所以需要第二次编码转成%和数字
//只有全数字+%的情况 编码之间的相互转换才不会乱码
// return "redirect:/search.html";
}
//页面js代码 获取重定向后页面URL请求的参数如:
$(document).ready(function() {
/* 搜索页面 */
/*$("#text1").on("click",function(){
alert("hellworl");
});*/
$.getUrlParam = function (name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
//获取全局数据
console.log("href:"+window.location.search);// href:?keyword=%25E6%25B0%25A8%25E5%259F%25BA&categoryId=5
var categoryId = $.getUrlParam('categoryId');
var keyword=$.getUrlParam('keyword');
console.log("name"+decodeURI(keyword)+" id:"+categoryId);});//name氨基 id:5