jmesa中,如何在查询结果数据中删除某条数据后,保留查询结果

      项目中,系统查询数据列表页面,对查询结果数据操作后(如删除),页面跳转到查询前的状态,而应该停留在当前页面,保留显示当前设置的查询条件。。
之前,大家都是重新调用后台查询方法(如list.do),刷新页面,导致之前查询结果数据失效。。
解决思路同jmesa查询方法,由于jmesa会在list.do后面加上他自己的查询字符串。那我直接调用jmesa的js查询代码就OK
好了,这个简单,在删除成功时,需要刷新数据的JS方法里添加jmesa自己的查询方法,onInvokeAction(id)。。。
对于不考虑分页的情况,以上方法可行,但同时要保留分页状态,怎么办呢,也就是我在查询结果中,选择table第2页,删除里面某条数据,删除后,table仍然显示查询结果第2页,而不需要用户重新查询,并翻到第二页。。。

       用firebug看了下发送到后台的url,发现url参数中,有分页信息,expert_p_=1。expert指的是tableid,这个自定,1就是当前页码。。。
分析了下jmesa,当查看下一页时,会先调用jQuery.jmesa.setPageToLimit(id,currentpage);方法,好了,只要我得到当前页面页码,问题就解决了。。。怎么获得当前页码呢,还是用furefug查看后台jmesa返回的table,发现页码貌似后台计算好,固定死了,页面无法通过dom查询到。。分析了下jmesa,js的源码,在jquery.jmesa.js中,发现存在classes对象,这个对象有分页,查询条件等属性,既limit,当前页面,就是limit.page。。。仔细看了下jquery.jmesa.js,没有发现哪有提供分页信息的对外接口。。。 晕,算了,自己在jquery.jmesa.js中添加

getLimitPage : function(id) {
        	var limit = this.getTableFacade(id).limit;
            return limit.page;
        }


接下来就是核心方法了,由于grooy和jsp标签对应的jmesa查询方法不一样,写了2个

function deleteWithLimitInfoForJSP(id){
	var currentpage=jQuery.jmesa.getLimitPage(id);
	jQuery.jmesa.setPageToLimit(id,currentpage);
	createHiddenInputFieldsForLimitAndSubmit(id);
}

function deleteWithLimitInfoForGroovy(id){
	var currentpage=jQuery.jmesa.getLimitPage(id);
	jQuery.jmesa.setPageToLimit(id,currentpage);
	onInvokeAction(id);
}


具体使用方法根据项目中的情况写的
一。使用Groovy,以需求申请为例:
将原有删除方法中的代码:

 else if(msg.hasDetail =='true') {
      $.post('${pageContext.request.contextPath}/roreq/listByRoreq.do?status='+Ext.get("statusBak").dom.value,
	 function(data) {
		 $("#RoReqs").html(data);
		 Ext.Msg.show({
		        title : 'OK',
		         msg : '删除成功!',
		             buttons : Ext.Msg.OK
		  });
	 });
        }




      
改成:

else if(msg.hasDetail =='true') {
					Ext.Msg.show({
		                 title : '成功',
		                 msg : '删除成功',
		                 buttons : Ext.Msg.OK,
		                 icon : Ext.Msg.INFO
		             });
					deleteWithLimitInfoForGroovy('roreq');
				}





核心方法是deleteWithLimitInfoForGroovy(id);需要将ID改为当前jmesa table的id,如'roreq'。。
注意,由于此方法会调用之前页面添加的查询方法onInvokeAction(id)
当且仅当查询代码是以下形似才能用deleteWithLimitInfoForGroovy(id)方法




     
    二。使用JSP标签,以供应商为例
    将else里的代码改为

Ext.Msg.show({
                 title : '成功',
                 msg : '删除成功',
                 buttons : Ext.Msg.OK,
                 icon : Ext.Msg.INFO
             });
    deleteWithLimitInfoForJSP('providers');


核心方法是deleteWithLimitInfoForJSP(id);需要将ID改为当前jmesa table的id,如'providers'。
注意,由于此方法会调用之前页面添加的查询方法createHiddenInputFieldsForLimitAndSubmit(id)
当且仅当查询代码是以下形似才能用deleteWithLimitInfoForJSP(id)方法


你可能感兴趣的:(WEB开发相关技术,function,table,groovy,firebug,jsp,url)