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表达式取出请求参数时,只需要进行一次编码即可。