--初始化
function ajax_init(response){ //response Action回傳頁面的參數 var dataWrap = response.getAjaxDataWrap("dataWrap") ; //從DataCenter中獲取相應的dataWrap數據 ajaxgrid.setData(dataWrap) ; //用表格展現數據 var record = dataWrap.getData(); //獲取封裝的數據 ajaxform.setRecord(record); //setRecord獲取數據源,ajaxform一行注釋掉,ajaxform表單顯示的數據為空 }
--查詢功能
function retrieve(){ var data = ajaxgrid.collectData(true) ; //查詢數據時,需要將頁面數據收集上傳,可以調用表格的collectData方法。 var dataArr = [] ; dataArr.push(data); $.request({ action:"retrieve", data:dataArr, success:ajax_init }) ; }
--ajax請求
$.request ({ Action:"調用的后台方法名稱", Saync:true || false, //同步或異步調用 Pageparam: "all" || "none", //是否收集頁面上的upload="true"的值進行上傳 data:dataArr, //收集表格或form中的屬性 //該屬性為數組格式 Params:{"收集用戶自定義參數":"參數值"},
//json數據格式,對應Action中的屬性名稱及值或者對應Action中封裝的property對象中的key及值。
//收集用戶自定義的參數,后台用參數的get方法獲取,多個參數用,隔開 Success:回調方法 //成功后的調用方法 });
--添加功能
function add(){ $.request({ action:"add", success:onaddcomplete }); } function onaddcomplete(response){ var rec = response.getAjaxDataWrap("dataWrap").getData(); //獲取dataWrap中的單條的數據 ajaxgrid.addRecord(rec) ; //表格添加一條記錄 }
--保存數據方法
Save方法也很簡單,保存前判斷是否進行校驗:if(ajaxgrid.isValid()),然后收集數據,調用后台方法,在保存成功后,在回調方法中要重置record緩存數組:ajaxgrid.reset()。
function save(){ if(ajaxgrid.isValid()){ //校驗表格數據是否合法 var gridData = ajaxgrid.collectData(false,"update") ; //收集表格數據 var dataArr = [] ; dataArr.push(gridData) ; //將收集的數據放入數組對象中 $.request({ //調用后台方法 action:"save", data:dataArr, success:onsavecomplete }) ; } } function onsavecomplete(response){ ajaxgrid.reset(); //重置表格修改標志 $.alert('提示信息',response.getMessage()) ; //獲取后台傳遞的自定義信息 }
--Action文件
@Namespace("/demo") @ParentPackage("framework-default") @Action(value = "/demo", results = {@Result(name="input",location="demo.jsp")}) publicclass DemoAction extends AjaxAction { privatestaticfinallongserialVersionUID = 1L; private AjaxDataWrap<DemoStudent>dataWrap = new AjaxDataWrap<DemoStudent>(); //頁面的數據封裝,包括數據列表、單條數據、固定查詢條件和分頁對象,AjaxDataWrap為和ajax表格配合使用的DataWrap,比DataWrap多了增加、刪除和更新記錄三個列表。 /** *查詢操作 */ @Override publicvoid retrieve() { QueryParamList params = getQueryParam("dataWrap"); //獲取指定名字的dataWrap的查詢參數 dataWrap.setDataList(調用方法查詢數據,返回結果為List< DemoStudent>); //調用方法查詢數據,返回結果為List< DemoStudent> responseData.setAjaxDataWrap("dataWrap", dataWrap); //向DataCenter對象中添加一個ajaxDataWrap } /** * 添加一條記錄 * @throws Exception */ publicvoid add() throws Exception { dataWrap.setData(new DemoStudent()); //向DataCenter對象中添加單條記錄 responseData.setAjaxDataWrap("dataWrap", dataWrap); } /** *保存操作 */ publicvoid save() { List<DemoStudent> updateList = this.dataWrap.getUpdateList() ; List<DemoStudent> insertList = this.dataWrap.getInsertList() ; List<DemoStudent> deleteList = this.dataWrap.getDeleteList() ; //調用方法保存增刪改列表數據 //處理頁面上傳的數據 responseData.setMessage("保存成功") ; } /** *初始化 */ @Override protectedvoid initTreat() { super.retrieveAfterInit = true ; //initTreat方法初次加載頁面時調用,retrieveAfterInit表示是否執行retrieve方法 this.dataWrap.getPageInfo().setRowOfPage(15); //設置表格每頁展示15條數據 } @Override public AjaxDataWrap<DemoStudent> getDataWrap() { //默認DataWrap的get方法,這里必須指定泛型有具體類型。如果頁面組件使用的是這個方法返回的DataWrap,那么頁面組件的name是”dataWrap”,不是這個方法返回的dataWrap的名字。 return dataWrap; } }
在Action類的最前面我們看到一些配置信息,其中:
@Namespace(“/demo”) 表示action的名字空間,和Action的value組合起來作為URL。@ParentPackage(“framework-default”)表示所在的Action需要繼承framework-default包。@Action(value="..",results= {@Result(name="..",location="..")})是配置的Action跳轉,value的值對應了前台的JSP文件中s:form標簽的action的屬性值。Result指向了打開的jsp文件,如果location的值是以”/”打頭,那么jsp文件就是從WebRoot根下開始的文件路徑,否則就是從WebRoot的@Namespace(“..”)路徑下的文件路徑。
