【activiti6】设计器的前后端集成与汉化
前言
在使用了官方提供的demo[activiti-app]后,可以考虑将官方的提供的activiti6的设计器集成到springboot项目中使用。网上大多数教程都是activiti6+activit5.22的设计器集成方案,而非activiti6+activiti6设计器。其原因还算因为activiti6设计器新增的新特性使用了新的数据表和新的持久层代码,而这部分新特性不属于官方维护,因此activiti-app中的表单引用、决策表等在纯activiti-engin是没有的,即使在activti7中也找不到这部分代码
区别
先说一下activiti5.22的设计器与activit6设计器的区别:
设计器版本/区别 | activiti5.22 | activiti6 |
---|---|---|
模型保存数据表 | act_re_model | act_de_model |
持久层实现方式 | 自己封装的持久层代码 | 使用jpa1.x保存 |
前端 | 可独立运行不需要登录认证 | 不可独立运行,需要登录权限认证 |
即使在activiti7中,默认保存模型也是在act_re_model
表中,而activiti6的activiti-engin
中提供的RepositoryService
的保存模型方法也是在act_re_model
表中,给人的感觉不是一拨人在维护这个代码,而实际上activiti6中的表单引用和决策表都需要将act_re_model
进行扩展,于是就把act_re_model
拓展成了act_de_model
。所以一般都是使用的5.22的设计器,它集成起来更友好,方便,前端设计器拖进去就能直接使用,只需要实现几个操作模型的接口,并且不需要强行引入jpa作为持久层
集成需要做的事
- 将activiti-app中的jpa版本升级到2.x以上,因为jpa1.x中的
findOne
方法在2.x版本中被移除了,需要将所有jpa在2.x被移除的方法都修改过来(比如findOne
),强行依赖上去会出现NoSuchMethodException
- 修改activiti6设计器中对登录权限这部分限制代码
- 汉化实际上是修改
stencilset_bpmn.json
文件的内容,将文件中对应title
和description
翻译过来,这个文件不可直接用5.22的设计器替代,因为新增了很多新特性,会导致显示不正常
集成步骤
- 升级JPA
首先将activiti6的源码从gitlab上面拉到本地,进入modules/activiti-ui
编辑activiti-ui-root
的pom文件,指定jpa的版本:
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>2.2.6.RELEASE</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><version>2.2.6.RELEASE</version></dependency>
这个时候重新打包就会出现编译问题,因为升级过后findOne
方法被移除了,需要一个一个的修改过来,比如:
修改完毕后将activiti-ui-root
执行打包命令:mvn install -DskipTests
这个时候就能在自己的springboot项目中放肆的引用它了:
<dependency><groupId>org.activiti</groupId><artifactId>activiti-app-rest</artifactId><version>6.0.1-SNAPSHOT</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><groupId>org.jadira.usertype</groupId><artifactId>usertype.core</artifactId></exclusion></exclusions></dependency>
注意:两个排除项都是必须的,不然会出现依赖冲突
2. 改造前端编辑器代码
进入/modules/actitivi-ui/activiti-app
下:
全局删除angularJS中的权限处理代码,比如:
移除的字符串为:
resolve: {verify: authRouteResolver
}
替换完毕后,将整个webapp下的文件移动到自己项目resource/static下面,最后启动自己的项目,并访问:
http://localhost:8080/app/editor/index.html#/editor/d97598f8-86b1-484e-9c9a-479360f267d9
,如果没有被跳转到登录页面,那就是成功了
3. 编写重定向控制层代码
由于编辑器默认就是修改操作,需要先创建已有数据才能进入,因此不能粗暴直接访问编辑器页面,需要新增如下控制层代码做重定向:
@RestController
@RequestMapping("/model")
public class ActivitiController {@Autowiredprivate ModelsResource modelsResource;@RequestMapping("/create")public void createModelNew(HttpServletRequest request, HttpServletResponse response){try{String modelName = "modelName"+ LocalDateTime.now();String modelKey = "modelKey"+ LocalDateTime.now();String description = "description";ModelRepresentation modelRepresentation = new ModelRepresentation();modelRepresentation.setName(modelName);modelRepresentation.setKey(modelKey);modelRepresentation.setDescription(description);modelRepresentation.setModelType(AbstractModel.MODEL_TYPE_BPMN);ModelRepresentation model = modelsResource.createModel(modelRepresentation);response.sendRedirect(request.getContextPath() + "/app/editor/index.html#/editor/" + model.getId());}catch (Exception e){}}
}
再将项目地址修改为/app
,因为设计器所有请求都是app开头,然而activiti-app-rest的代码是以rest开头的,不加app会导致所有请求404,而他原来代码中通过springMVC的配置类,指定了不同请求的处理规则(org.activiti.app.servlet.WebConfigurer
):
/*** Initializes Spring and Spring MVC.*/private void initSpring(ServletContext servletContext, AnnotationConfigWebApplicationContext rootContext) {log.debug("Configuring Spring Web application context");AnnotationConfigWebApplicationContext appDispatcherServletConfiguration = new AnnotationConfigWebApplicationContext();appDispatcherServletConfiguration.setParent(rootContext);appDispatcherServletConfiguration.register(AppDispatcherServletConfiguration.class);log.debug("Registering Spring MVC Servlet");ServletRegistration.Dynamic appDispatcherServlet = servletContext.addServlet("appDispatcher", new DispatcherServlet(appDispatcherServletConfiguration));appDispatcherServlet.addMapping("/app/*");appDispatcherServlet.setLoadOnStartup(1);appDispatcherServlet.setAsyncSupported(true);log.debug("Registering Activiti public REST API");AnnotationConfigWebApplicationContext apiDispatcherServletConfiguration = new AnnotationConfigWebApplicationContext();apiDispatcherServletConfiguration.setParent(rootContext);apiDispatcherServletConfiguration.register(ApiDispatcherServletConfiguration.class);ServletRegistration.Dynamic apiDispatcherServlet = servletContext.addServlet("apiDispatcher",new DispatcherServlet(apiDispatcherServletConfiguration));apiDispatcherServlet.addMapping("/api/*");apiDispatcherServlet.setLoadOnStartup(1);apiDispatcherServlet.setAsyncSupported(true);}
- 汉化处理
直接将stencilset_bpmn.json添加到resource目录即可
完整项目地址已上传到github:https://github.com/Siwash/activiti6-start
【activiti6】设计器的前后端集成与汉化相关推荐
- 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js + Web API前后端集成项目
前言 上次发表了<一键生成Vue.js + Web API前后端集成项目>后,有多位网友来问,有不有其他的前后端集成模板: 实际上,VS2022没有提供前后端集成项目模板. 但是,使用VS ...
- 一键生成Vue.js + Web API前后端集成项目
前言 默认情况下,Visual Studio提供了"基于Vue.js Web 应用程序"项目模板,可以生成Vue.js前端项目. 你需要另外创建Web API项目,调试时需要同时启 ...
- BAT大牛亲授从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)
围绕"搜索"核心业务,构建 "房屋寻租"完整前后端 业务 分角色用户入口: 普通用户/管理员用户 完善的管理功能: 后台管理/权限管理 核心功能模块: 房源浏览 ...
- Spring Boot 前后端配合及接口化测试学习记录[3]
前后端不分离 1.对静态资源的映射处理 2.模板引擎: 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成 ...
- Sublime Text 3118 集成插件汉化定制版——赵亮(碧海情天)
2019独角兽企业重金招聘Python工程师标准>>> 不知何时,在我这里,OSCHINA的编辑器无法复制粘贴内容了,只能全部手打,所以写博客非常不方便. CSDN的博客,时间太久不 ...
- springboot集成activiti汉化
activiti的modeler汉化. 汉化步骤: 将en.json(路径:editor-app/i18n/en.json)文件汉化,改名zh-CN.json,放在en.json同目录. 同时将汉化后 ...
- springboot jwt token前后端分离_为什么要 前后端分离 ?
作 者:互扯程序 来 源:互扯程序 广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶.导致用户接受文章不及时.您可以打开订阅号,选择置顶(星标)公众号,重磅干货,第一时间送达! 本文知 ...
- 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客
前戏 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦, 并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务 ...
- rsa前后端加密流程_不懂前后端分离?这篇就够了
一 传统的开发模式 前后端分离前我们的开发协作模式一般是这样的: 前端写好静态的HTML页面交付给后端开发.静态页面可以本地开发,也无需考虑业务逻辑只需要实现View即可. 后端使用模板引擎去套模板, ...
- 前后端分离和不分离到底有什么区别
前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多 ...
最新文章
- MySQL中exists与in的使用
- Flink从入门到精通100篇(二十一)-Flink 状态(State)管理在推荐场景中的应用
- Entity Framework Core 6.0 预览4 性能改进
- mysql特性举例_MySQL事务的四大特性和隔离级别
- 【UML】交互建模中交互图允许的消息类型
- Linux 不小心删除了 root,root目录不小心删除了怎么办……
- mysql索引别名_Mysql索引知识详谈
- 在modelarts上部署mask-rcnn模型
- js学习 字符串常用方法
- 软件测试--数据库基础知识
- 深度学习 + OpenCV,Python实现实时视频目标检测
- 构建一个可靠的分布式计数器--memcached之incr/decr操作实战分析
- python笔记——常用的内置函数
- Flash Builder4安装SVN插件
- PhotoShop简介
- 诱人的 TypeScript 视频教程(69 个视频)
- python中怎么定义二维数组_如何在Python中定义二维数组
- 山海经电子书古文/翻译白话文版发布,免费电子书。
- Mysql 索引存放位置
- linux mint运行速度,Linux Mint 19 Tara Cinnamon启动应用速度将会更快
热门文章
- 终端模拟器免ROOT安装Linux,【全机型通用】不用电脑,用终端模拟器刷入第三方Recovery...
- python下载bt文件_使用libtorrent-python下载Torrent
- word批量替换交叉引用格式
- 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | AVC 序列头格式解析 )
- 企业如何从0到1搭建BI系统
- w ndoWs8pE模式下载,电脑店超级U盘启动盘制作工具V6.8(全能版)
- 【论文笔记】基于聚类特征深度LSTM的语音情感识别
- 乐max2 android 7.0,辣评烩:​乐Max 2即将升级EUI 6.0 基于安卓7.0!
- Keil芯片安装包下载
- 天涯明月刀服务器维护,天涯明月刀手游维护时间表一览,维护什么时候结束?[多图]...