function changeOrder(grid,commandName) {
var grid=eval(grid);
var selectModel=grid.getSelectionModel();
var store = grid.getStore();
var selectedRowIndex=selectModel.lastActive;
//获取选中行
var selectedRow = selectModel.getSelected();
//如果没有选中行,提示错误
if (!selectedRow) {
Ext.MessageBox.alert('${app:i18n('prompt')}',"请选中要调整顺序的行!");
return;
}
if (selectModel.getSelections().length>1) {
Ext.MessageBox.alert('${app:i18n('prompt')}','使用【最上】【上移】【下移】【最下】按钮调整顺序的方式,暂只支持单选模式,!');
return;
}
if((commandName=='top'||commandName=='up')&&selectedRowIndex + 1 == 1){
Ext.Msg.alert('${app:i18n('prompt')}',"当前已经是第一行。");
return;
}
if((commandName=='bottom'||commandName=='down')&&selectedRowIndex + 1 == store.getCount()){
Ext.Msg.alert('${app:i18n('prompt')}',"当前已经是最后一行。");
return;
}
var cindex = undefined;
var total = store.getTotalCount();
var startRow=store.getAt(0);
var endRow=store.getAt(total-1);
var changRow=null;
switch (commandName) {
case "top":
changRow=startRow;
break;
case "bottom":
changRow=endRow;
break;
case "up":
if (selectedRowIndex != undefined && selectedRowIndex > 0) {
cindex = selectedRowIndex - 1;
changRow=store.getAt(cindex);
}
else {
cindex = 0;
changRow=store.getAt(cindex);
}
break;
case "down":
if (selectedRowIndex != undefined && selectedRowIndex < total -1) {
cindex = selectedRowIndex + 1;
changRow=store.getAt(cindex);
}
else {
cindex = total -1;
changRow=store.getAt(cindex);
}
break;
default:
Ext.MessageBox.alert('${app:i18n('prompt')}',"没有找到正确的CommandName!");
}
sendMsg(selectedRow.data,changRow.data,store);
}
function sendMsg(obj1,obj2,store){
// 将数据放到另一个数组中
var selFuns = [];
selFuns .push(Ext.util.JSON.encode(obj1));
selFuns .push(Ext.util.JSON.encode(obj2));
//调用sava方法保存排序信息
Ext.Ajax.request({params: {funExt:selFuns},
url: "../kbskoujing/saveKbsSituationOrder.action",
success: function(response) {
var resp = Ext.util.JSON.decode(response.responseText);
if (resp.status == "ok") {
store.load();
}
}
});
}
拖拽
Ext.onReady(function(){
var fristGridDropTargetEl = gridView.getView().mainBody;
var fristGridDropTarget = new Ext.dd.DropTarget(fristGridDropTargetEl, {
ddGroup:"gridDDGroup",
notifyDrop:function(ddSource, e, data){
var grid = data.grid;
var store = grid.store;
var rows = grid.getSelectionModel().getSelections();
var selecIndex=grid.getSelectionModel().lastActive;
if (rows.length>1) {
Ext.MessageBox.alert('${app:i18n('prompt')}','拖拽排序,暂只支持单选模式!');
return;
}
var cindex = ddSource.getDragData(e).rowIndex;
if (cindex == undefined || cindex < 0) {
e.cancel = true;
return;
}
var selectedRow=store.getAt(selecIndex);
var changRow=store.getAt(cindex);
sendMsg(selectedRow.data,changRow.data,store);
}
});
});
前台传array数组,后台处理如下:
private List<KbsSituation> selFuns;
private List funExt;//省略set、get方法
//保存排序信息
public String saveKbsSituationOrder() {
if (funExt != null && funExt.size() > 0) {
JSONObject jsonObj = null;
String[] dateFormats = new String[]{"yyyy-MM-dd HH:mm:ss"}; // 由于 yyyy-MM-dd't' HH:mm:ss的格式没有空格如:2008-08-12 01:20:30
//后台会报错,所以要在实体上面加注解 并且在get方法上面如:@JSON(format="yyyy-MM-dd HH:mm:ss"),这样就没有带T的格式
// 将存放json字符串的对象转换为JSONArray类型
JSONArray array = JSONArray.fromObject(funExt);
Object[] objArray = array.toArray(); // 将JSONArray转换为对象数组
selFuns = new ArrayList<KbsSituation>();
for (Object obj : objArray) {
jsonObj = JSONObject.fromObject(obj);// 将对象类型转换为json对象 由于日期类型丢失,所以要转换
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
KbsSituation kbsSituation = (KbsSituation) JSONObject.toBean(jsonObj,KbsSituation.class);
selFuns.add(kbsSituation);
}
if (null != selFuns && selFuns.size() > 0) {
KbsSituation situation0 = selFuns.get(0);
KbsSituation situation1 = selFuns.get(1);
List<KbsSituation> kbsSituations = new ArrayList<KbsSituation>();
if (null != situation0 && null != situation1) {
Long seq0 = situation0.getSituationSequence();
Long seq1 = situation1.getSituationSequence();
situation0.setSituationSequence(seq1);
situation1.setSituationSequence(seq0);
kbsSituations.add(situation0);
kbsSituations.add(situation1);
}
kbsSituationBiz.updateKbsSituationList(kbsSituations);
status = "ok";
}
}
return SUCCESS;
}