springmvc4.1整合activity流程

3 篇文章 0 订阅
1 篇文章 0 订阅

  Springmvc整合activity的步骤和遇到的问题总结

1、引入相关的maven依赖包

1.1Jackson

主要作用的使用ObjectMapper组装和返回json格式的数据

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-annotations</artifactId>
   <version>2.8.0</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.8.7</version>
</dependency>
<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.8.7</version>
</dependency>

1.2、Activiti6.0版本

工作流核心

<properties>
    <activiti.version>6.0.0</activiti.version>
</properties>

<!-- Activiti -->
<dependency>
   <groupId>org.activiti</groupId>
   <artifactId>activiti-spring-boot-starter-basic</artifactId>
   <version>${activiti.version}</version>
</dependency>

<dependency>
   <groupId>org.activiti</groupId>
   <artifactId>activiti-json-converter</artifactId>
   <version>${activiti.version}</version>
</dependency>

1.3、添加控制器、前端页面、editor等相关文件信息

a.文件夹说明:

configuration:设计器的属性配置及工具栏和后台交互(重点)

css:样式文件

editor:activiti设计器的oryx插件基于做的流程拖拽

fonts:字体

i18n:国际化文件

images:图片

lib:引用angular,bootstrap等ui,js的文件

partials:左侧元素选项栏的html文件

popups:弹出框的html,保存,修改元素等html

stencilsets:bpmn各种元素图标,(svg放在配置文件)

b.主要文件说明:

stencilset.json:定义元素的属性,规则的配置文件,页面的展示就是根据这个配置文件

editor.html:定义了这个页面的布局,顶部,左侧的工具栏,右侧的画布和元素属性编辑栏

app-cfg.js : 配置调用接口的地址

app.js :angularJS的入口文件,注入需要使用的模块,以及国际化和请求模型json信息

stencil-controller.js:编辑窗口的控制器,包括了元素的快捷方式,元素的属性保存updatePropertyInModel

toolbar-controller.js:定义快捷键对应工具栏的按钮

configuration\properties.js  :定义各属性的读取写入的html配置

configuration\url-config.js  :定义接口的相应地址(平常做集成到自己系统主要看这里,实现这2个接口即可)

c.配置文件说明

--属性的定义

"propertyPackages" : [ {

    "name" : "process_idpackage",

    "properties" : [ {

        "id" : "name",      ---id

        "type" : "String",  --类型,在赋值的时候会根据类型展示各种输入框,根据properties.js

        "title" : "名称",  --显示的标题

        "value" : "",      --值

        "description" : "BPMN元素的描述性名称.", --描述

        "category":"property", --分类,空的话位popular

        "popular" : true,         --是否显示

        "refToView" : "text_name" --触发svg里面的效果

    }]

--节点的定义

"type" : "node",

    "id" : "MailTask",

    "title" : "邮件任务",--标题

    "description" : "邮件任务", --描述

    "view" : "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n</svg>", --svg的xml

    "icon" : "activity/list/type.send.png",        --图标

    "groups" : [ "任务" ], --归属的组

    "propertyPackages" : [ "overrideidpackage" ],--属性

    "hiddenPropertyPackages" : [ ],

    "roles" : [ "Activity" ] --规则

d.代码顺序:

modeler.html->editor.html->app.js/stencil-controller.js->properties.js->oryx.debug.js(核心代码,每个版本都是基于这个做封装)

e.总结:

整个设计器其实都是基于oryx.debug.js做了一层扩展,扩展的代码量不多,使用了angularJS,大家在看的时候应该也很容易看懂。

2、添加配置文件信息

2.1 添加spring-activiti.xml配置文件信息

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="databaseSchemaUpdate" value="create-drop"></property>
        <property name="dbHistoryUsed" value="false"></property>
    </bean>
</beans>

2.2 添加jackson配置文件信息

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean id="handlerAdapter"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </list>
    </property>
</bean>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.FormHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
        </list>
    </property>
</bean>

2.3 添加web.xml配置文件信息

对于提交保存的PUT请求,后台无法获取参数的问题解决

<filter>
    <filter-name>HttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3、踩坑总结

3.1 关于RequestMapping返回json数据异常问题

问题描述:获取模板的json数据加载配置界面一直报JavaScript错误,最终定位到是控制器返回的数据内容类型和前端调用不匹配导致:

@RequestMapping("/editor/stencilset")

返回string格式的json数据,前端获取到的数据类型为application/text,导致数据无法解析,在不改变核心JavaScript的前提下,对返回的数据类型进行整改,注意这里返回的字符编码是gb2312如果是utf-8会出现中文乱码。

@RequestMapping("/editor/stencilset")
public void getStencilset(HttpServletRequest request, HttpServletResponse response) {
    InputStream stencilsetStream = this.getClass().getResourceAsStream("/stencilset.json");
    response.setContentType("application/json");
    response.setCharacterEncoding("gb2312");
    try(OutputStream ros = response.getOutputStream()) {
        String temp = IOUtils.toString(stencilsetStream, "utf-8");
        IOUtils.write(temp, ros);
        ros.flush();
    } catch (IOException e) {
        throw new ActivitiException("Error while loading stencil set", e);
    }
}

3.2 关于编辑完成后点击提交异常错误的问题

前端使用PUT方法进行提交,由于springmvc对于PUT方法处理机制问题,导致无法获取参数信息,在web.xml中添加对PUT请求方法的转换处理,在控制器上添加额外的参数处理方式

/**
 * 保存
 *
 * @param modelId
 * @param name
 * @param jsonXml
 * @param svgXml
 * @param description
 */
@RequestMapping(value = "/model/{modelId}/save",method = RequestMethod.PUT)
public void saveModel(@PathVariable String modelId,
                      @RequestParam(value = "name", required = false) String name,
                      @RequestParam(value = "json_xml", required = false) String jsonXml,
                      @RequestParam(value = "svg_xml", required = false) String svgXml,
                      @RequestParam(value = "description", required = false) String description) {
    try {
        ObjectMapper objectMapper = new ObjectMapper();
        Model model = repositoryService.getModel(modelId);
        ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
        modelJson.put("name", name);
        modelJson.put("description", description);
        model.setMetaInfo(modelJson.toString());
        model.setName(name);
        repositoryService.saveModel(model);
        repositoryService.addModelEditorSource(model.getId(), jsonXml.getBytes(StandardCharsets.UTF_8));
    } catch (Exception e) {
        throw new ActivitiException("Error saving model", e);
    }
}

3.3 添加流程后导出xml的格式文件,放到processes文件夹下无法初始化的问题

由于把数据库之前初始化的记录给清除了,导致后面一直没法初始化模板信息,这个可能是在第一次创建表结构的时候进行的模板初始化,而后续的删除记录导致异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值