js前臺編碼,java後臺解碼,el表示式拼裝param中文引數編碼
js前臺編碼:
1.使用兩次encode
function query(nameObj,brandnameObj){
var namevalue = window.encodeURI(window.encodeURI(nameObj.value));
var brandnamevalue = encodeURI(encodeURI(brandnameObj.value));
var form = document.forms[0];
form.action="<html:rewrite action='/product/list.do'/>?sort=&name="+namevalue+"&brandname="+brandnamevalue;
form.submit();
}
2.使用一次encode
function query(nameObj,brandnameObj){
var namevalue = window.encodeURI(nameObj.value);
var brandnamevalue = encodeURI(brandnameObj.value);
var form = document.forms[0];
form.action="<html:rewrite action='/product/list.do'/>?sort=&name="+namevalue+"&brandname="+brandnamevalue;
form.submit();
}
java後臺解碼(對應前臺兩次編碼):
1.死都不知道怎麼死的方法:
if(formbean.getName() != null && !"".equals(formbean.getName())){
formbean.setName(URLDecoder.decode(formbean.getName(),"UTF-8"));
jpql.append(" and o.name like ?"+(parmars.size()+1));
parmars.add("%"+formbean.getName()+"%");
}
2.正確方法:
if(formbean.getName() != null && !"".equals(formbean.getName())){
String name= URLDecoder.decode(formbean.getName(),"UTF-8");
jpql.append(" and o.name like ?"+(parmars.size()+1));
parmars.add("%"+name+"%");
}
java後臺解碼(對應前臺一次編碼):
if(formbean.getName() != null && !"".equals(formbean.getName())){
String name = new String(formbean.getName().getBytes("iso-8859-1"),"UTF-8");
jpql.append(" and o.name like ?"+(parmars.size()+1));
parmars.add("%"+name+"%");
}
el表示式分頁param中文請求引數:
function topage(page){
var form = document.forms[0];
var namevalue="";
var brandnamevalue="";
namevalue = window.encodeURI("${param.name}");
brandnamevalue = encodeURI("${param.brandname}");
form.action="<html:rewrite action='/product/list.do'/>?sort=<c:if test="${!empty param.sort}">${param.sort}</c:if><c:if test="${!empty param.name}">&name=</c:if>"+namevalue+"<c:if test="${!empty
param.brandname}">&brandname=</c:if>"+brandnamevalue;
form.page.value=page;
form.submit();
}
綜上:
注意最主要的一點就是java自動會進行一次url轉碼操作,所以那個不知道怎麼死的方法,就是因為轉碼之後又賦給formbean就已經亂碼了。
而用el表示式取出請求引數時,只需要進行一次編碼即可。