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的名字空间,和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(“..”)路径下的文件路径。