1.菜单配置可以是以前的方式,也可以按新的方式配置 - 使用UI上下文的可以是UI://type#content?param=xxx这种方式,UI不区分大小写,但是上下文的content区分大小写 - 使用自定义的页面,可以使用USEJS://xxxx这种方式,usejs不区分大小写,但是:后面的内容区分大小写 - 打开别的页面,实际使用iframe打开,使用http://xxx或者https://xxx - 使用弹出浏览器窗口,使用open:,其中open不区分大小写 2.项目说明 - 本项目是基于平台2020版本的基础上构建的,移除了以前的dojo,引入未来2021版本的layui - 本项目最低采用java8,tomcat8运行 3.包名规范 - 全部在com.vci下 - com.vci.framerworkcore是平台2021版本中的部门角色用户等兼容的包,只能修复bug,不能再其中添加与平台无关业务 - com.vci.web是本项目的web端核心处理的内容,自己的业务需要新创建包,包的规范为产品名字+客户代号,比如mes112,mdm420等 - 自己的业务的包名规范为 ``` controller 控制器,即接收前端传递的数据 model 业务类型映射的对象文件,里面只能是属性,getter和setter,禁止使用级联方式创建getter pagemodel 显示对象,即后台返回给前端显示的内容 dto 数据传输对象,前端传递给后台的对象,主要在controller中接收前端接收的数据使用 enumpck 枚举的对象,要继承BaseEnum lcstatuspck 或者lifeCycle 都是生命周期的对象,也是继承BaseEnum dao 数据操作,如果需要调用平台的接口,也是到这个下边 service 服务包,主要的业务逻辑写到这个包下 constant 常量汇总,请依照java开发规范 properties 配置项,业务里引用配置时都引用这个包下的 config 自动配置,即properties的默认值都是从config里的设置的 bo 业务处理的对象,只在service层中使用 ``` 4.SpringMvc开发指南 - 接口规范,采用restFul的规范,但不是强制要求 ``` GET 获取资源,比如列表,树,表单的获取数据 POST 创建资源,比如新建的保存等 PUT 更新资源,比如修改数据,这个是幂等的 DELETE 删除资源,比如删除数据 ``` - 注解的使用 ``` @Controller 表示当前这个类是一个控制器,这个类下的方法要返回JSON的方式时,需要在方法上@ResponeBody注解,否则是查询返回值.html这个文件 @RestController 表示当前这个类是rest控制器,这个类下的方法不需要加@ResponeBody的注解. 推荐使用RestController注解,而不使用@Controller @RequestMapping 访问的路径,即前端访问后台的路径,可以使用其中的method属性来设置restFul的类型 @GetMapping get方式的访问路径,即等于@RequestMapping + method=GET @PostMapping post方式的访问路径,即等于@RequestMapping + method=POST @PutMapping put方式的访问路径,即等于@RequestMapping + method=PUT @DeleteMapping delete方式的访问路径,即等于@RequestMapping + method=DELETE @RequestBody 表示前端使用json方式提交,这个注解加了后,这个方法里只能有这一个参数 @RequestParam 定义参数 ...还有其他不常用的注解。 推荐使用明确的访问路径,不推荐使用RequestMapping 禁止全部都使用get方式,特别是添加和修改等数据长度很大的场景 @VciBusinessLog 是操作日志的注解,是利用aop的实现的,可以用于到Class上,也可以用于方法上;方法上的优先级大于class。系统会自动记录操作日志.这个注解可以使用controller里的参数的值 @VciPermission 访问权限,即这个访问地址是否有权限被访问,这个主要绑定菜单的编号,即某个菜单被授权了给当前用户,就可以被访问。如果是开放的则设置controlMethodPermission为true @VciReferPermission 表示这个访问路径是参照,它的权限取决于使用参照的地方,使用参照的地方对应使用@VciUseReferMethod 权限主要是自编写的代码的时候才这样写注解,使用平台UI定义的接口,依然是由UI权限控制的 ``` - 请求的方式 * 表单提交方式,即key=value这种方式。application/x-www-form-urlencoded。 controller里面直接使用对象来接收,或者controller里使用参数接收 如果是提交列表,需要Controller里的参数是对象,对象的属性是列表。前端的数据提交方式是 "xxx[0].yyy":"value" xxx是对象里的属性名字,yyy是列表对象里的属性 如果是提交Map,需要Controller里的参数是对象,对象的属性是Map。前端的数据提交方式是 "xxx['yyy']":"value" xxx是对象里的书序名称,yyy是map里的key。 比如BaseQueryObject * JSON提交方式,即json格式的字符串.application/json。 controller里面直接使用对象来接收,并且添加@RequestBody,而且只能一个参数,同时访问的类型是post或者put * 文件上传,后台controller中使用MultipartFile来接收,这个参数的名字和前端提交的文件的name属性相同。默认为file * 文件下载,controller返回值是void。文件先放到临时文件夹下,然后调用ControllerUtil里的方法返回前端 - 返回值 * 分页列表,DataGrid * 树 List * 其他 BaseResult.即使你方法是其他的返回值,最终也会统一为BaseResult - 统一的异常 系统会统一处理异常,业务代码里可以不catch,因为事务是由平台控制的,所以业务里的异常不考虑事务的影响。但是需要考虑业务里面的因为事务的完整性 5.踩坑指南 - 不要在非Controller里使用request和Respone。因为采用了前后分离模式,放在session和request里的数据已经不能读取 - 处理业务的时候一定要注意数据的完整性,建议使用WebBoServiceImpl里封装的增删改查方法,然后在最后一次性提交 - 以前的平台的corba链接在conf.properties里,暂时无法去除,但是在打包的时候不要包含这个配置文件,统一使用rmip-system-common里的conf文件。这个在启动的bat文件上已经加入到classpath了 - model,pageModel和dto建议使用代码生成器生成。防止代码手敲出错 - 如果页面是UI上下文配置的,但是按钮的业务功能是单独编写的,不要把业务只写到controller里,而是统一到service里,否则又掉入无限加参数的怪圈中,后续维护时要人命 - 注释一定要全面,注释一定要全面,注释一定要全面 - 前置事件只能用于查询,不要在其中添加和修改数据 - 业务中尽量避免直接操作ClientBussinessObject或者ClientLinkObject,而是改用业务对象的方式,不然加一次属性,要全局找受影响的文件 - 运行环境里多语失效的问题,需要在bat文件设置多语的路径为BOOT-INF/classes/xxxx 6.maven仓库 - 请使用本项目里的settings.xml - 平台jar使用的是ant编译的,可以在编译后,使用vci-platform-web工程里的BatchRedeployJar2Maven里执行一下,把新的Jar传递给maven私服。然后在本地仓库里删除com.vci.platform下的依赖,最后再重新下载依赖