js实现关于数据字典的使用和数据存放的策略
来源:互联网 发布:仿古架淘宝上的价格 编辑:程序博客网 时间:2024/05/17 07:25
项目中的页面经常会和数据字典的值进行查询,一个一个去用ajax去请求,无疑很浪费时间,当时我的想法是做一个js的工具类,里面放这么几个方法,
1.getAll() //用ajax获得所有数据
2.findTypeData(type) //按type把数据查询出来
3.findNameById(type,id) //按type和id得到汉字的值
经过一段时间的使用,确实方便了挺多,但是,每次加载页面时都要去getAll()一下,还是挺耗时的,当时想了一下,给了两个解决方案,
1.把数据字典的数据放在cache,在去用el表达式之类的去取,不访问数据库
2.把数据字典的数据拼成一个json数组,写入那个js工具类中,这样,就开始的时候下载这个js,数据和操作方法也都在该js中,也不需要去请求服务器了
由于本人比较喜欢js,就用了方案2
思路是这个样子的
1.写一个js工具类的模板,放在资源文件夹中,
2.javaIO去读该文件,获的文件的数据流,在jdbc请求数据字典数据,拼成想要的格式,在把这两个数据流一拼,在js打印到指定的位置,并把它做成一个方法
3.当数据字典发生增删改时,便调用该方法
4.js是浏览器中有缓存的话是不会在去下载的,当我js在服务器这里更新时,浏览器还是不会更新,必须把浏览器清除缓存才行,这样毫无疑问是不行的,好在公司的技术大哥告诉我一个思路,通过传动态参数的形式去下载这个js,我这里使用的传日期,当传的日期不同是,服务区就会请求并下载js,也就是一天下载一次。
后来我发现公司的框架中已经把数据存cache了,这就挺尴尬了
下面是实现代码
js的工具类
/** * 获得所有数据字典数据 */function getAllData(){return diclist;}/** * 数据源在页面内 * @param classifyTp 数据字典的classifyTp * @param classifyCd 数据字典的classifyCd * @returns {String} 数据字典的value */function findDicInPage(dicList,classifyTp,classifyCd){var result='';var state=1;for(var i=0;i<dicList.length;i++){if(dicList[i].classifyTp==classifyTp&&dicList[i].classifyCd==classifyCd){result=dicList[i].classifyNm;state=2;break;}}if(state==1){result=classifyCd;}return result;}/** * 数据源在页面内 * 返回id,value * @param classifyTp * @returns {String} combobox所需要形式的值 */function findDicDataInPage(dicList,classifyTp){var result='[';$.each(dicList,function(i,n){if(n.classifyTp==classifyTp){var rjson='{';rjson+='id: "'+n.classifyCd+'",';rjson+='text: "'+n.classifyNm+'"';rjson+='}';if(i!=dicList.length-1){rjson+=',';}result+=rjson;}})result+=']';return eval(result);}
2.java的io流那快
//字典js的打印public void proDicJS(HttpServletRequest request,List<WrClassifyB> diclist) throws IOException {JSONArray json = new JSONArray();// *========生成基础数据js=========*//String mbpath = request.getSession().getServletContext().getRealPath("/static/js/util/model/dic.js");// 模板jsFile file1 = new File(mbpath);InputStream fi = new FileInputStream(file1);long fileSize = file1.length();byte[] buffer = new byte[(int) fileSize];int offset = 0;int numRead = 0;while (offset < buffer.length && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {offset += numRead;}// 确保所有数据均被读取if (offset != buffer.length) {throw new IOException("Could not completely read file " + file1.getName());}fi.close();String mb = new String(buffer);String path = request.getSession().getServletContext().getRealPath("/static/js/util/dic.js");File file = new File(path);for (WrClassifyB dic : diclist) {json.put(MapUtil.toMap(dic));}FileWriter in;try {in = new FileWriter(file);in.write("var diclist=" + json.toString() + ";\n" + mb);in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
3.浏览器请求
Date nowDate=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");String date=sdf.format(nowDate);request.getSession(true).setAttribute("date",date);调用js
<script type="text/javascript" src="${pageContext.request.contextPath}/static/js/util/dic.js?date=${date}"></script>
- js实现关于数据字典的使用和数据存放的策略
- 关于数据字典的使用
- 数据字典的实现
- 数据字典的操作和使用
- jeecg 数据字典的定义和使用
- 关于数据区中存放的东西
- hadoop2.0的datanode多目录数据副本存放策略
- hadoop2.0的datanode多目录数据副本存放策略
- NValue存放的数据
- 数据存放的位置
- 【Swift】数据的存放
- c# 中关于sql数据库的视图和数据字典的使用有感~
- 使用数据字典的实例
- JEECG-数据字典的使用
- ORACLE数据字典的使用
- JS类似于数据字典的功能
- 和kcome的讨论--关于用TBuf8存放文件中读出的数据
- HDFS数据副本存放策略
- Java 8 语言变化
- 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题
- 对比aspx和html
- poj之旅——2718
- 关于javascript的原型对象的一些理解
- js实现关于数据字典的使用和数据存放的策略
- *关于音频焦点和音频竞争通道的问题
- c++作业5
- bzoj2595: [Wc2008]游览计划
- 软考程序员计算机专业英语
- Codeforces 673D Bear and Two Paths (贪心构造)
- NAT 苹果要求支持ipv6的原因吧。
- c++小游戏之贪吃蛇
- linux进程调度之 FIFO 和 RR 调度策略