JQuery、JSON、Ajax在与ervlet结合的工资计算模块

原创
2014/03/07 12:00
阅读数 89

        最近在做一个人力资源管理的项目,由于前期与师兄沟通不畅,导致了现在这个小模块的产生。这个小模块主要是做个人工资计算用的;分为三个部分:
        1)基本工资部分
        2)个人保险部分
        3)个人所得税部分
        除了第三部分之外,其他两部分都可以依据用户需求手动添加基本工资项和个人保险项,考虑到用户在进行工资计算的时候势必要对照自己所填信息,于是采用ajax技术与后台进行交互,但是ajax由于与浏览器的兼容问题,于是我又选择了jquery技术的ajax来解决。从后台传回来的值因为有三个(工资总和,个人保险总和,个人所得税),所以只能选用json作为传回值。在网上查找了很多资料,都不尽相同,试了几个都没什么效果,最后看到一篇文章很不错:http://hi.baidu.com/driftice/blog/item/2f7d2a89472af3ba0e244452.html,照着他的思路把我的模块实现了。

        先对模块进行技术分析,因为要手工添加基本工资项和个人保险项,这就需要使用前台的js来实现,这个地方我使用的是上一个亚美项目的现成代码来实现的比较简单,后来想用jquery来实现,但是发现貌似没那么简单,于是就把资料放在那,一直懒得研究了。

        关键代码如下:

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(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中。前台所有的关键技术已经结束了。

        现在讲介绍servlet如何对ajax数据进行处理并返回。
        servlet对ajax数据的处理和post提交没有区别,主要是在如何生成json并返回这个地方。

        关键代码如下:

//构建一个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();

        很简单,前台只需要设定好接受函数就可以了,虽然现在看来很简单的一个东西,但是在一开始,还是搞得我焦头烂额的,用了一个下午的时间才真正搞定它

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部