项目框架:springmvc+mybatis+oracle
最近项目使用弹出框,弹出框业务操作完成时列表刷新总是提示是否需要重新重新提交。试了很多方法,最后将列表页面的刷新方式改为get,然后使用url传参时需要编码,在controller里面还得需要解码。
页面编码使用下面的js方法:
/************************************************************ *拼接字符串 *@Author *@version 2012-08-14 ************************************************************/ function linkUrl(){ var args = linkUrl.arguments; var doc = args[0]; var retStr = ""; if(doc != undefined){ var docArr = doc.split("~"); if(docArr != undefined){ for(i=0;i<docArr.length;i++){ var tempdata = document.getElementById(docArr[i]).value; if(tempdata != undefined){ if(i == 0){ retStr = docArr[i] + "=" + tempdata; }else{ retStr = retStr + "&" + docArr[i] + "=" + tempdata; } } } } } if(retStr != ""){ retStr = encodeURI(encodeURI(retStr)); }; return retStr; }
Jsp页面为:
//快速查询 $("span:contains(查 询)").click(function() { var reStr="fepname~name~idcard"; var result=linkUrl(reStr); window.location.href = "${ctx}/housesale/housesaleperson/bcosalerinfolist?"+result; });
后台解码方法:(java代码)
Controller调用:entity = (BcoSalerinfo)ParamUtils.parseObject("fepname,0~name,0~idcard,1", entity);(BcoSalerinfo类里面必须有相应属性)
/****
* function: process parameter decode
*
* @version: 2012-08-16
* ****/
public static Object parseObject(String paramName, Object entity){
if(paramName != null && !"".equals(paramName) && !"null".equals(paramName)){
String[] paraArr = paramName.split("~");//name,flag~name,flag……
if(paraArr != null && paraArr.length > 0){
for(int i=0; i<paraArr.length; i++){
String paraStr = paraArr[i];
if(paraStr != null && !"".equals(paraStr) && !"null".equals(paraStr)){
String[] filedArr = paraStr.split(",");
if(filedArr != null && filedArr.length == 2){
if(filedArr[1] != null && "0".equals(filedArr[1])){//need decode
String str = (String)Reflections.invokeGetter(entity, filedArr[0]);
if(str != null && !"".equals(str) && !"null".equals(str)){
Reflections.invokeSetter(entity, filedArr[0], EncodesUtils.urlDecode(str));
}
}else{
continue;
}
}
// }
}
}
}
return entity;
}
注:该方法依赖于反射的一个类文件,参考附件(Reflections.java)。