J2EE基础应用平台-EMP北京宇信易诚科技有限公司基础平台部刘景应Copyright©2009YuchengTechnologiesLimitedAllRightsReserved.北京宇信易诚科技有限公司进阶培训实践2主要内容1.唯一性约束校验;2.多Tab标签页开发(base、ext、sub);3.前端页面开发框架(列表页面、详情页面);4.文件上传下载;5.TCPIP渠道接入;6.访问控制开发范例;7.数据校验;8.异常处理;3MVC逻辑模型唯一性约束校验4唯一性约束校验onchangeCheckUniqueByConditionAction5Onchange事件中触发唯一性验证emp:textid=useridlabel=用户IDrequired=trueonchange=checkUnique()/6checkUnique.mvc中返回JsonView7checkUnique.biz调用CheckUniqueByConditionAction校验类8CheckUniqueByConditionAction校验类9触类旁通?其他类似的功能都可以这样实现,如:9唯一性验证9关连验证9业务编码验证9特殊约束9。。。10MVC逻辑模型多Tab标签页开发(base、ext、sub)11数据模型12多Tab标签页开发(base、ext、sub)13Tab标签页两种实现方式一种是在整个JSP页面载入时页签中的内容就已经存在了,页签的作用只是为了对内容进行重整显示(一个jsp文件,div进行区分不同的区段);另一种是页签中的内容还未载入,需要向服务器端重新发起请求(多个jsp文件,IFRAME进行嵌入);14Tab标签页main.jsp15页签定义标签emp:tab页签定义标签是对页签分组中每个页签的详细设置,例如标题的名称、页签内容的来源等等9id:页签分组中每个页签的惟一标识9label:页签所显示的标题9url:页签所对应的请求url9initial:是否在JSP主页面载入时就对页签进行初始化(发起请求),缺省是false9needFlush:每次点击标题时,是否都要刷新页签的内容(是否都要重新向服务器发起请求),缺省是false16MVC逻辑模型前端页面开发框架(列表页面、详情页面)17列表页面list.jsp18列表页面list.jsp19emp:gridLayout页面布局布局组件就是根据定义在其中的EMP数据标签的相关配置,自动的构造出一个TABLE表格结构。根据每个标签的colSpan属性决定所占的列数以及根据CSS属性等决定显示的样式等等。其中如果某一列隐藏,则同一行的其它列则自动的扩展;如果某一行中所有列都隐藏,那么则该行就自动隐藏。这是为了保持页面整体展现不是随着个别标签的显示、隐藏而出现变动,某一列隐藏后,只影响到当前行的显示。需要注意的是:布局组件只能对EMP单数据标签进行组织、布局,对于其它的标识无法标识。20emp:gridLayout页面布局属性id:布局组件的惟一标识。并且为每个布局组件注册一个分组标签操作对象,以便于统一的管理同一布局组件中的标签操作对象maxColumn:表格布局的最大列数,缺省是两列显示的。这里说的列数并不是指TABLE中的TD标签,则是将描述、数据展现和说明等与一个数据标签相关联的部分当作一列title:布局组件的标题显示,如果不定义该属性,则不显示任何标题cssClass:布局组件中整个表格的样式,缺省是emp_gridLayout_tablecssTitleClass:布局组件中标题的样式,缺省是emp_gridlayout_title21emp:table列表数据组件EMP列表数据标签所生成的HTML代码远不止一个TABLE标签这么简单,其中包含了标题栏部分、数据模板部分、数据展现部分、统计部分以及最后的分页部分;EMP列表数据标签就将其生成的特定TABLE标签“注册”为一个列表数据标签操作对象,通过对列表数据标签操作对象的控制,可以实现对列表的各种复杂的功能;22列表页面java代码开发说明%@pageimport=com.ecc.emp.core.EMPConstance%%@pageimport=com.ecc.emp.core.Context%%@pageimport=com.ecc.emp.data.IndexedCollection%%@pageimport=com.ecc.emp.data.KeyedCollection%%Contextcontext=(Context)request.getAttribute(EMPConstance.ATTR_CONTEXT);//从request中获取context对象try{IndexedCollectioniColl=(IndexedCollection)context.getDataElement(sysconfigIColl);//从context中获取列表页面iColl信息KeyedCollectionkColl;Stringsyskey,sysvalue;for(inti=0;iiColl.size();i++){kColl=(KeyedCollection)iColl.get(i);syskey=(String)kColl.getDataValue(syskey);sysvalue=(String)kColl.getDataValue(sysvalue);System.out.println(syskey=+syskey+;sysvalue=+sysvalue);}}catch(Exceptione){System.out.println(sysconfigIColl对象不存在异常,com.ecc.emp.data.ObjectNotFoundException);}%23列表页面js代码开发说明xxxIcolliColl对象属性说明方法说明_obj与IColl数据元素对象相关联的列表数据标签操作对象_getSize获得当前IColl数据元素对象中所拥有的总记录数EMP.data.IColl.prototype._getSize=function()_getXMLFormData将数据以XML格式返回EMP.data.IColl.prototype._getXMLFormData=function()xxxIcoll._objiColl对应的table对象属性说明方法说明pageQuery分页查询对象getParamStr获取当前选中记录的某些字段的GET请求串@paramkeys要获取的多个字段名,数组形式@returnGET请求串,若没有选中数据,则返回nullEMP.widget.DataTable.prototype.getParamStr=function(keys,prefix)selectType选择类型,0代表不支持选择,1代表单选,2代表多选toForm将整个表单数据复制到指定form@paramform目标formEMP.widget.DataTable.prototype.toForm=function(form)pageMode是否分页查询ajaxQueryAPI方法,向url发起异步请求,取得JSON定义串@paramurl所请求的URLEMP.widget.DataTable.prototype.ajaxQuery=function(url,form)url分页查询的默认URLselect选择一条记录@parami记录编号@paramclear是否清除当前选择EMP.widget.DataTable.prototype.select=function(i,clear)recordCount记录数clearAll清除所有选择EMP.widget.DataTable.prototype.clearAll=function()selectAll选中所有记录EMP.widget.DataTable.prototype.selectAll=function()getSelectedIdxAPI方法,以数组形式获得当前选中记录的行号(从0开始编号)EMP.widget.DataTable.prototype.getSelectedIdx=function()getDataValueAPI方法,以数组形式获得当前选中记录的取值集合(只包含取值,而不是数据对象)EMP.widget.DataTable.prototype.getDataValue=function()getSelectedData以数组形式获得当前选中记录的kColl集合EMP.widget.DataTable.prototype.getSelectedDxxxIcoll._obj.pageQuery数据列表分页查询功能栏,由数据列表调用生成,不单独使用属性说明方法说明table对应的table对象setInfo设置分页信息EMP.widget.PageQuery.prototype.setInfo=function(currentPage,maxLine,recordSize)pageType列表类型:loafrefreshInfo刷新分页信息的显示EMP.widget.PageQuery.prototype.refreshInfo=function()info分页控制信息{currentPage:1,maxLine:15,totalPage:1,recordSize:0}toPage转向某一页@paramtargetPage目标页号EMP.widget.PageQuery.prototype.toPage=function(targetPage)toPrevious转向前一页EMP.widget.PageQuery.prototype.toPrevious=function()toNext转向后一页EMP.widget.PageQuery.prototype.toNext=function()toFirst转向第一页EMP.widget.PageQuery.prototype.toFirst=function()toLast转向最后一页EMP.widget.PageQuery.prototype.toLast=function()directTo转向跳转框中指定的页面EMP.widget.PageQuery.prototype.directTo=function()setWaiting设置各操作元素的查询等待状态@paramwaiting是否查询等待状态EMP.widget.PageQuery.prototype.setWaiting=function(waiting)24详情页面update.jsp25详情页面java代码开发说明%@pageimport=com.ecc.emp.core.EMPConstance%%@pageimport=com.ecc.emp.core.Context%%Contextcontext=(Context)request.getAttribute(EMPConstance.ATTR_CONTEXT);//从request中获取context对象StringextID=(String)context.getDataValue(extID);//从context中获取表单字段信息System.out.println(extID=+extID);%26详情页面js代码开发说明Field表单数据域对象通过以下方式获取表单中的数据域:varfields=page.dataGroups.dataGroup_in_formdetailForm.fields;for(variinfields){varfield=fields[i];alert(field.data._getValue());}如果想取单个数据域,可以直