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(..)路径下的文件路径。

谢谢大家的阅读,阅读后记得关注一下呦!
原文地址:https://www.cnblogs.com/bhy-1116/p/8313776.html