|
|
项目框架: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).value;if(tempdata != undefined){if(i == 0){retStr = docArr + "=" + tempdata;}else{retStr = retStr + "&" + docArr + "=" + 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; 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)。 |
|