版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
应用开发框架第一页,共37页。目录一、框架介绍二、表单引擎三、查询引擎四、公共工具第二页,共37页。目录框架技术2框架结构3设计背景1框架介绍第三页,共37页。设计背景–面向电子政务行业类应用快速响应业务和管理需求按时交付产品的压力人员流失的风险开发成本居高不下第四页,共37页。发展历程年份版本概述20081.0在药监行业项目基础上提炼开发框架,主要包括底层核心架构、查询引擎。20091.1实现表单引擎,系统管理功能。20101.2引入JBPM工作流引擎,基于javawebstart封装可视化流程设计器,实现基于flex的流程回放功能。2011-20141.3升级完善,spring2.5升级为spring3.1,整合lodop网页打印,流水号生成器等。2015-20162.0新增了大量丰富的UI组件,提升用户体验、注重交互,加入可编辑表格等功能。2008201020092015201420112016第五页,共37页。框架技术客户端业务层数据访问层SpringFrameworkSpringBean--业务主体HTMLJDBCTemplateJavaScriptCSSJQueryJSPTAGFlashDBHibernateAJAXAcegiSecurity--安全校验ApacheCXF--WebServicePOI--Excel导入导出SpringAOP--事务处理控制层编码过滤器安全过滤器第六页,共37页。框架功能结构界面层控制/业务层数据访问层JS控件JSPTAGHibernateJDBCTemplate字典管理查询引擎表单引擎日志管理用户管理权限管理菜单管理机构管理异常服务日志服务文件服务WebService服务安全过滤器第七页,共37页。控制层Controller控制层由SpringMVC实现,完成请求参数及对象转换、业务服务调用、视图选择等处理:收集、验证请求参数并绑定到对象将命令对象交给业务对象,处理后返回模型数据返回ModelAndView(模型数据和逻辑视图名称)第八页,共37页。业务层
业务层完成所有业务操作,运算和数据存储调用,提供了核心业务处理的功能,这些业务功能可以组合以完成复杂的组合业务;业务逻辑层通过调用DAO对象完成数据的存取,以DTO对象作为传输的数据载体。注意事项:业务层只能被Controller调用第九页,共37页。数据访问层DAO
数据访问层主要由DAO对象组成,完成数据库的访问,DAO对象包含数据访问逻辑(而不是业务逻辑),DAO对象全职负责与数据库的交互,并隐藏了其中的实现细节。第十页,共37页。数据持久化层
集成持久化工具,为DAO层提供数据操作调用,开发框架集成了Hibernate、JDBCTemplate两种持久化框架,实现对数据库的访问。JDBCTemplate高效、内嵌Spring框架中、支持基于AOP的声明式事务;Hibernate支持以持久化对象的形式进行数据库操作,有利于快速开发。第十一页,共37页。过滤器过滤器名称职责CharacterEncodingFilter编码处理FilterToBeanProxy登录、权限控制JnlpRewriteFilter流程设计器处理ExceptionFilter异常处理WebFilter安全过滤器第十二页,共37页。目录模型结构2可编辑表格3功能介绍1查询引擎第十三页,共37页。查询引擎操作按钮查询条件查询表格查询表格主要分为三部分:操作按钮、查询条件、查询表格功能:查询引擎支持数据库表或者视图查询,根据配置的查询条件,自动编写SQL;操作按钮可以对表格行进行前后端操作;查询条件可以配置成各种JS控件,如tree、bigselect、checkbox等;查询表格用于展示数据,在可编辑表格模式下,还可以进行数据修改、录入,支持列排序、列宽度、列隐藏、分页、excel导出等功能。第十四页,共37页。查询引擎——查询时序图<MVC>QueryController<interface>QueryRequestCreator<MVC>QueryService<interface>QueryValidateinterface>QueryDataProviderQueryInstance<interface>QueryOperationProessorgetData():String新增、修改、删除()create(String):QueryRequestvalidateQueryForAjax(QueryRequest)getData(QueryRequest,QueryEntry):QueryResponse翻译()fetchFormData(QueryRequest)buildQuery(QueryRequest)execute(List,QueryEntry,QueryResponse):QueryResponseexecute(QueryOperation,List,QueryResponse,QueryEntry):QueryResponse第十五页,共37页。查询引擎模型结构<q:QueryEntryid="query_demo_component"title="查询控件示例"tableName="DEMO_COMPONENT"primaryKey="ID"parent="queryEntryTemplate"> <q:queryColumns> <q:QueryColumncolumnName="ID"title="ID"/> </q:queryColumns> <q:queryCriterias> <q:QueryCriteriacolumnName="INPUT_VALUE"label="input" inputType="string"defaultOperation="like"defaultMatchMode="middle_match"/> </q:queryCriterias> <q:queryDataProvider> <beanclass=".hnisi.framework.query.backingbean.DbQueryDataProvider"> <propertyname="jdbcService"ref="jdbcService"></property></bean> </q:queryDataProvider> <q:queryBuilders> <beanclass=".hnisi.framework.query.backingbean.DefaultQueryBuilder"></bean> </q:queryBuilders> <q:queryOperations> <q:QueryOperationlabel="保存"icon="icon_menu_list_3.png)no-repeat-40px-80px"> <q:queryOperationProcessor> <beanclass=".hnisi.framework.query.backingbean.DefaultUpdateRowOperationProcessor"、> </q:queryOperationProcessor> </q:QueryOperation> </q:QueryEntry>模型主体表格列查询条件数据提供者SQL构建器操作按钮第十六页,共37页。查询引擎——可编辑表格可编辑表格是特殊的查询引擎,它能够方便的对数据进行新增修改删除操作。同时还要以下功能:1、多行编辑模式2、单行编辑模式3、支持特殊行,特殊列,不可编辑4、新增行,根据后台给默认值第十七页,共37页。可编辑表格配置与普通查询引擎对比<q:QueryEntryeditGrid="true"allEdit="true"> <q:queryColumns> <q:TextEditColumndbType="varchar2"columnName="NAME"title="姓名"convertType="url"sortable="true" convertExp="/form/form_demo_form.do?actionType=modify&detailId=:{ID}&a=:{request.a}"> </q:TextEditColumn> <q:NumberEditColumndbType="varchar2"columnName="NUM"title="number"></q:NumberEditColumn> </q:queryColumns></q:QueryEntry>主要有三点不同1、设置editGrid="true",开启可编辑表格功能2、设置allEdit=true或者false,用于判断多行编辑还是单行编辑模式3、queryColumn列需要换成对应控件的EditColumn第十八页,共37页。目录模型结构2手写表单3功能介绍1表单引擎第十九页,共37页。表单引擎第二十页,共37页。表单引擎——时序图<MVC>FormController<MVC>FormService<interface>FormDataProvideInterceptorinterface>FormDataProviderFormInstance<interface>FormOperationloadForm()保存()preProvided(FormRequest)getData(FormRequest,FormEntry):FormResponse防止重复提交()fetchFormData(FormRequest)createFormInstance(FormRequest)execute(FormRequest):OperationNavigatorexecute(FormRequest,String,FormEntry):QueryResponsepostProvided(FormRequest):FormResponse:FormResponse:FormResponse第二十一页,共37页。模型结构<f:FormEntryid="form_demo_form"title="角色"showToolbar="true"parent="formEntryTemplate"tableName="DEMO_USER"primaryKey="ID"submitModel="true"> <f:formGroups> <f:FormGrouplabel="基础信息"cols="4"labelWidth="20%"inputWidth="30%"> <f:formFields> <f:NumberFormFieldfieldName="ID"label="用户编码"dbType="varchar2"colspan="1"dbSize="50"displayWidth=""inputType="number" readonly="false"hidden="true"maxlength="11"/> <f:BigselectFormFieldfieldName="SEX1"label="单选字典"dbType="varchar2"colspan="1"dbSize="50"displayWidth="100px" dictInputMode="yxdict"inputType="select"readonly="false"required="true"dictType="bean"type="single"onItemAdd="function(){console.log('xxx');}" defaultValue="03"dictExpression="selectOneDictDictionaryProvider"></f:BigselectFormField> </f:formFields> </f:FormGroup> </f:formGroups> <f:formOperations> <f:FormOperationlabel="保存"submitModel="true"icon="icon_menu_list_3.png)no-repeat-0px-180px"> <f:operationProcessor> <beanclass=".hnisi.framework.form.backingbean.SaveOperationProcessor"></bean> </f:operationProcessor> </f:FormOperation> </f:formOperations> <f:formDataProvider> <beanclass=".hnisi.framework.form.backingbean.DbFormDataProvider"> <propertyname="jdbcService"ref="jdbcService"></property> <propertyname="detailIdName"value="detailId"></property> </bean> </f:formDataProvider> </f:FormEntry>表单引擎表单主体表单字段表单按钮数据提供者表单分组第二十二页,共37页。手写表单手写表单是通过模型表单生成出来的,但是和JSP页面有所区别,对应的控件,并不是原生的html而是框架定义的tag标签。<hnisi:formBigSelectformFieldId="多选字典"formEntryId="form_demo_form"formId="form_demo"fieldName="bigselect"/>优点:1、可以任意的修改页面布局,不存在模型表单的局限性2、可以在页面添加其他标签,像query等不足:1、需要维护手写页面及对应的表单模型2、如果框架对页面有所更新,无法影响到手写页面第二十三页,共37页。目录1公共容器-HnisiContext公共工具2js代码引擎机制-JavaScriptEngine3WebService4润乾报表5附件平台6日志管理7组织机构管理8用户管理9角色管理10字典管理11菜单管理12功能管理第二十四页,共37页。公共工具——公共容器-HnisiContextHnisiContext给开发人员提供开发便利,是一个全局性公共容器。提供以下方法:1、ServletRequestgetRequest()
获取ServletRequest对象2、HttpServletRequestgetHttpServletRequest()
获取HttpServletRequest对象3、HttpSessiongetSession()
获取HttpSession对象4、Map<String,Object>getReqParam()
获取页面隐藏参数5、UsergetCurrentUser()
获取当前登录用户对象第二十五页,共37页。公共工具——js代码引擎机制-JavaScriptEngineJavaScriptEngine是基于ScriptEngine进行封装,同时配置SpringAOP,让模型配置拥有更强的拓展性。未增加引擎之前:<q:QueryEntryshowCheckbox="true"....showCheckbox要么是true,要么是false,如果想根据用户信息或者其他属性来判断是否展示checkbox,是做不到的增加引擎之后:<q:showCheckbox> <value> %{return"123"==":{loginUser.getUserid()}"?"true":"false";}% </value></q:showCheckbox>拥有JavaScriptEngine后,模型配置就拥有很强的拓展性了。第二十六页,共37页。公共工具——WebService
WebService是基于ApacheCXF,它逻辑性的为其他应用程序提供数据与服务。各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问WebService,通过WebService内部执行得到所需结果。WebSer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论