最近在作一我的力资源管理的项目,因为前期与师兄沟通不顺畅,致使了如今这个小模块的产生。这个小模块主要是作我的工资计算用的;分为三个部分:
1)基本工资部分
2)我的保险部分
3)我的所得税部分
除了第三部分以外,其余两部分均可以依据用户需求手动添加基本工资项和我的保险项,考虑到用户在进行工资计算的时候势必要对照本身所填信息,因而采用ajax技术与后台进行交互,可是ajax因为与浏览器的兼容问题,因而我又选择了jquery技术的ajax来解决。从后台传回来的值由于有三个(工资总和,我的保险总和,我的所得税),因此只能选用json做为传回值。在网上查找了不少资料,都不尽相同,试了几个都没什么效果,最后看到一篇文章很不错:http://hi.baidu.com/driftice/blog/item/2f7d2a89472af3ba0e244452.html,照着他的思路把个人模块实现了。
javascript
先对模块进行技术分析,由于要手工添加基本工资项和我的保险项,这就须要使用前台的js来实现,这个地方我使用的是上一个亚美项目的现成代码来实现的比较简单,后来想用jquery来实现,可是发现貌似没那么简单,因而就把资料放在那,一直懒得研究了。html
关键代码以下:java
function addBasicItem() { var tdFile = document.getElementByIdx_x("basic"); var tableRow = tdFile.insertRow(tdFile.rows.length-1); var i=tdFile.rows.length; tableRow.id = "rowr" + (i-1); var cell0 = tableRow.insertCell(0); cell0.className="th"; cell0.innerHTML ="基本工资"+(i-1); var cell1 = tableRow.insertCell(1); cell1.innerHTML ="<input type='text' id='incomeAmt"+(i-1)+"' name='incomeAmt' value='0' maxlength='10'/><span class='unit'>元</span> <a href='javascript:deleteBasicItem(""+tableRow.id+"")';><span class='shanchu'>删除</span></a>"; } //删除一行 function deleteBasicItem(rowId) { var tableDetail = document.getElementByIdx_x("basic"); tableDetail.deleteRow(document.getElementByIdx_x(rowId).rowIndex); }
解决了这个问题,那前台的问题就剩下格式校验了,话说这个问题也是比较好作的,这里不作详述了。
以后就是jquery ajxa的应用,前面说到,由于返回的时候是三个值,因此采用的是json,故须要不少包的支持
1.java包的支持,想使用json,必须导入如下jar包:
“json-lib-2.3-jdk15.jar”,同时需导入JSON依赖包“commons-logging-1.0.4.jar”,“commons-lang.jar”,“commons-collections.jar”,“commons-beanutils.jar”,“ezmorph-1.0.4.jar”;
2 js相关的文件,一共有两个:需引入"jquery-1.4.2.min.js"与"json2.js"
这样全部的准备工做已经完毕,如今jsp页面写出咱们要提交表单的js代码关jquery
键代码以下:ajax
jQuery(function($) { // 使用 jQuery 异步提交表单 $('#myForm').submit(function() { $.ajax({ url: 'cal', data: $('#myForm').serialize(), type: "post", cache : false, dataType:'json', success: function(data){ $("#edTaxSum").attr("value",data.personTax); $("#fullSum").attr("value",data.tatolWages); $("#edInsSum").attr("value",data.instrument); } }); return false; }); });
这段即包含了提交表单的一些设置,还提供了返回值的处理函数,在返回值的处理函数中,我将返回的数值分别赋值到三个input中。前台全部的关键技术已经结束了。json
如今讲介绍servlet如何对ajax数据进行处理并返回。
servlet对ajax数据的处理和post提交没有区别,主要是在如何生成json并返回这个地方。浏览器
关键代码以下:app
//构建一个JSONObject JSONObject resultJSON = new JSONObject(); resultJSON.accumulate("personTax", personTax); resultJSON.accumulate("instrument", instrument); resultJSON.accumulate("tatolWages", tatolWages); //须要设置ContentType为"application/x-json" resp.setContentType("application/x-json"); PrintWriter out = resp.getWriter(); //向客户端输出JSONObject字符串 out.println(resultJSON.toString()); out.flush(); out.close();
很简单,前台只须要设定好接受函数就能够了,虽然如今看来很简单的一个东西,可是在一开始,仍是搞得我焦头烂额的,用了一个下午的时间才真正搞定它异步