JS、Action文件講解


--初始化

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的名字空間,和Actionvalue組合起來作為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(..)路徑下的文件路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM