流程项目点水笔记

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全局     $&原字符串

posted @ 2017-04-21 11:38  jiapeng  阅读(281)  评论(0编辑  收藏  举报