流程项目点水笔记
1、Hibernate参数化查询数据,传入参数变量时,如果变量个数不确定,就放到List集合中,执行dao.queryListBySQL时,参数可以用list.toArray()传入
2、判断数据库中数据记录是否为叶子节点,可以使用SQL:select id from table where id not in(select pid from table where pid is not null)
3、构造树方法,使用HashMap存储一遍记录,id作为key,当然其中有值对象存pid,遍历HashMap,将当前对象,作为Map根据pid得到的对象的孩子,否则就是根
4、oracle Clob转String
public String clobToString(Clob c) { StringBuilder sb = new StringBuilder(1024); Reader instream = null; try { instream = c.getCharacterStream(); char[] buffer = new char[(int) c.length()]; while (instream.read(buffer) != -1) { sb.append(buffer); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (instream != null) { try { instream.close(); } catch (Exception dx) { dx.printStackTrace(); } } } return sb.toString(); }
5、流程项目中,要实现模板复制功能,当然同时也要复制所有节点节点中有id,pid,totalcode字段
实现方式暂时用的是字符串替换ID方式,就是把记录转成JSON字符创,把旧的ID替换为新的ID,然后转成JSONArray数组,批量插入表中
6、java web用poi导出Excel文件遇到问题
js下载文件不能用ajax,因为:
ajax的返回值类型是json,text,html,xml类型,或者可以说ajax的接收类型只能是string字符串,不是流类型,所以无法实现文件下载。但用ajax仍然可以获得文件的内容,该文件将被保留在内存中,无法将文件保存到磁盘。这是因为JavaScript无法和磁盘进行交互,否则这会是一个严重的安全问题,js无法调用到浏览器的下载处理机制和程序,会被浏览器阻塞。
可以使用window.location.href='路径';
对response处理:
protected void setDownLoadFileName(String fileName) throws UnsupportedEncodingException { if(request.getHeader("User-Agent").toLowerCase().contains("msie")){ fileName = URLEncoder.encode(fileName, "utf-8"); fileName = StringUtils.replace(fileName,"+", "%20"); }else if(request.getHeader("User-Agent").toLowerCase().contains("firefox")){ fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1"); }else if(request.getHeader("User-Agent").toLowerCase().contains("rv:11")){//ie 11 fileName = URLEncoder.encode(fileName, "utf-8"); }else{ fileName = new String(fileName.getBytes("UTF-8"),"ISO-8859-1"); } response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition","attachment; filename=\"" + fileName + "\""); }
方法案例:
if (StringUtils.isNotBlank(instanceidStr) && StringUtils.isNotBlank(staticaltarget) && StringUtils.isNotBlank(targetstatus)) { try { ServletOutputStream outputStream=response.getOutputStream(); try { setDownLoadFileName(instanceName+".xlsx"); manageService.exeportStaticalData(Long.parseLong(instanceidStr),staticaltarget,targetstatus,dimnodeStr,dimNames,outputStream); outputStream.flush(); outputStream.close(); }catch (Exception e){ e.printStackTrace(); try { setDownLoadFileName("error.xlsx"); outputStream.write(e.getMessage().getBytes()); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } }finally { outputStream.flush(); outputStream.close(); } }catch (Exception e){ e.printStackTrace(); } } else { responsePrint(""); }
7、前端中文到后端乱码问题:
JavaScript:
window.self.location="searchbytext.action?searchtext="+encodeURIComponent(encodeURIComponent(seartext));
java:
searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");/*需要处理异常*/
另外还有一种方法是JavaScript进行一次编码,后台java处理时换种想法就好了:
java代码:
String s = new String(request.getParameter("name").getBytes("ISO8859-1"), "UTF-8");
8、jQuery对象拼接问题
refFormTrObj='<tr name="refform"><td></td><td colspan="2"><ul style="list-style-type: none"></ul></td></tr>'; ($(obj)).after($(refFormTrObj)); var ulObj=$('ul',$(refFormTrObj)); ulObj.append('<li>测试</li>');
这里要注意的是jQuery操作通过字符创得到的对象,每一次$都会创建一个新对象,上面代码两次使用$(refFormTrObj),每次操作的都不是一个对象,所以出错
如果jQuery两次使用$操作jQuery对象,操作的就是同一个对象,只是字符串会重新创建新对象
9、数值类型逗号拼接的字符串转为带单引号的数值字符串拼接,用于后台查询时,in语句,不同数据库id主键有可能是数值有可能是字符串
java代码:String str="12,23,34";转换:str="'"+str.replaceAll(",","','")+"'";
js代码使用正则替换str.replace(/[^,]+/g,"'$&'"); [^,]表示非逗号 /g全局 $&原字符串