流程项目点水笔记
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全局 $&原字符串
相关文章
- 短信项目实现流程详细解读
- Jmeter接口测试流程详解(中科软测认证中心)
- web测试的基本流程
- 测试按项目流程阶段划分
- 淘东电商项目(72) -互联网安全架构设计(责任链模式重构网关流程)
- 精细App测试方法-流程-重点,成功入职就靠它了
- Jmeter接口测试流程详解(中科软测认证中心)
- Vue - 实现微信扫码登录功能(项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案
- Vue - cli3 脚手架搭建项目步骤流程(windows)
- uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程
- React vscode 创建 react 项目流程
- freeline源码修改和配置流程
- Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动
- 项目开发—项目开发流程8个步骤
- TLV1.2 RSA密钥协商和ECDHE密钥协商两种方式的连接建立流程
- 浅析Array.reduce()语法、reduce执行流程、常见使用(所有值求和、提供初始值累加所有值、二维转一维、计算元素出现个数、按属性分类、顺序执行promise、功能型管道函数等)
- Android系统启动流程(四)Launcher启动过程与系统启动流程
- 【framework】ATMS启动流程
- Vue学习第35天——模拟项目上线基本流程
- 爬虫流程复习3
- springboot项目打包、部署Tomcat流程详解
- 掌握 6 张图彻底搞懂 DevOps CI/CD 流水线和高级项目集成流程,规范各种参与角色打造快速、可靠、持续的交付团队协作