jmesa之删除

在公司的项目中用到了EC/ET,后来说要重新移植一下该项目,于是在本人的鼓动下,决定使用jmesa来替代,由于jmesa的前身就是EC,所以用法也比较相似,再加上之前也花过一些时间用了一下,因此自己还是比较有信心的。但经过这一个多月的深入接触,发现jmesa还有许多地方需要改进,由于官方好像也只有一个人维护(而且也不积极),所以也不能指望官方来修护了。于是不得不花些时间去看看它的源码,还一些不满意的地方进行修改。总体来说,jmesa功能还是比较强大的,要玩得转它,就相当于学习一种新框架,由于问题比较多,时间也有限,因此先暂时写一下在jmesa中增加“删除”的功能。由于jmesa本身并没有提供删除的功能,于是需要手动的操作来完成,显示部分的代码如下:

<jmesa:htmlColumn title="操作" editable="false" filterable="false" sortable="false">
<a href="javascript:void(0);" onclick="deleteUser('user_table1','${bean.id}');">删除</a></jmesa:htmlColumn>


之所以要这么做而不是直接用URL来实现删除,是因为删除时应当保留当前的页数,如在第二页删除了一条记录,那么删除以后也应该回到第二页才对,要实现此功能,需要用到jmesa的分页功能,而这些参数的获取及赋值也需通过JS来实现,因此这样做似乎更合理一些。在JS部分,可以这样:

<script type="text/javascript">
            function onInvokeAction(id) {
                $.jmesa.setExportToLimit(id, '');
                $.jmesa.createHiddenInputFieldsForLimitAndSubmit(id);
            }
            function onInvokeExportAction(id) {
                var parameterString = $.jmesa.createParameterStringForLimit(id);
                location.href = '${pageContext.request.contextPath}/user/user.mvc?method=showUsers&id=user_table2&' + parameterString;
            }
            function deleteUser(tableid,id){
        		deleteWithLimitInfoForJSP("${pageContext.request.contextPath}/user/user.mvc",tableid,id);
        	}
        </script>


上面就加了一个deleteUser方法,然后在相应的jmesa.js加入以下代码:

function createParameterStringForLimit(id) {
    return jQuery.jmesa.createParameterStringForLimit(id);
}

function deleteWithLimitInfoForJSP(deleteurl,tableid,id){
    var currentpage=jQuery.jmesa.getLimitPage(tableid);
    jQuery.jmesa.setPageToLimit(tableid,currentpage);
    jQuery.ajax({
    	  type: "get",
    	  url: deleteurl,
    	  data: "method=ajaxDelete&id="+id,
    	  success: function(msg) {
    		alert("删除成功!");
    		createHiddenInputFieldsForLimitAndSubmit(tableid);
    	  }
    });
}

/*********** Filter ***********/
....

即添加了deleteWithLimitInfoForJSP方法,通过其前后的代码,也能知道该段代码该放在什么地方,此代码就是执行删除操作的代码,通过调用jquery的AJAX操作来实现,然后调用控制器的ajaxaDelete方法实现删除,这个方法还用到了一个getLimitPage方法,这个方法的代码放在jquery.jmesa.js中:

onInvokeExportAction : function (id) {
            var tableFacade = this.getTableFacade(id);
            var f = window[tableFacade.onInvokeExportAction];
            if ($.isFunction(f) !== true) {
                throw tableFacade.onInvokeExportAction + ' is not a global function!';
            } else {
                f(id);
            }
        },
        getLimitPage : function(tableid,id) {
            var limit = this.getTableFacade(tableid).limit;
            return limit.page;
        }
    };

    /*********** Objects and Prototype Functions ***********/
.

之所以把前后的代码放出来,是为了确定其放的位置,这些代码其实是参照了网上的实现,只是那篇博客讲得并不完整,所以故重新把它整理写了下来,这样一个基本的删除操作就算完成了。
关于jmesa的问题还有很多,以后有空再把其它的写下来。

你可能感兴趣的:(jquery,Ajax,mvc,prototype,Firebug)