diagram-viewer跟踪查看流程图,springmvc+activiti5.19

新的activi 中未能找到老版简介中提供的ActivitiRestApplication,所以就直接由springmvc为Diagram Viewer提供服务,也好大家理解一下Diagram Viewer怎么运行的。

1、在官方提供的Zip文件(可以从www.activiti.org/download.html下载)中有一个activiti-explorer.war文件,解压文件,复制其中的diagram-viewer复制到项目中。

复制modules\activiti-diagram-rest下面的java源文件到项目源文件中,如放到com.ffcs.zzy.workflow.control包下面

  • BaseProcessDefinitionDiagramLayoutResource.java
  • ProcessDefinitionDiagramLayoutResource.java
  • ProcessInstanceDiagramLayoutResource.java
  • ProcessInstanceHighlightsResource.java

2、修改上述后面3个源文件的RequestMapping,在原来的路径前面加/service,总共有3个地方,原来是

@RequestMapping(value="/process-definition/{processDefinitionId}/diagram-layout", method = RequestMethod.GET, produces = "application/json")

修改成

@RequestMapping(value="/service/process-definition/{processDefinitionId}/diagram-layout", method = RequestMethod.GET, produces = "application/json")

3、调整spring-mvc.xml,原来是

	<!-- 自动扫描的包名 -->
	<context:component-scan base-package="com.ffcs.**" /> 

修改成

	<!-- 自动扫描的包名 -->
	<context:component-scan base-package="com.ffcs.**" /> 
	
	<!-- 为了返回jsonp添加的 ControllerAdvice-->
	<context:component-scan base-package="com.ffcs.**" use-default-filters="false">
        <context:include-filter type="annotation"
                                expression="org.springframework.stereotype.Controller"/>
        <context:include-filter type="annotation"
                                expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
    </context:component-scan> 

4、添加spring-mvc-modeler.xml,

	<!-- 自动扫描且只扫描@Controller -->
	<context:component-scan base-package="org.activiti.rest.editor,org.activiti.rest.diagram">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	<mvc:annotation-driven />

5、添加JsonpAdvice,其中com.ffcs.zzy.workflow.control就是上面源文件的所在的包


import javax.servlet.http.HttpServletRequest;

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;


@ControllerAdvice(basePackages = "com.ffcs.zzy.workflow.control")
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {

    private final String[] jsonpQueryParamNames;

    public JsonpAdvice() {
        super("callback", "jsonp");
        this.jsonpQueryParamNames = new String[]{"callback"};
    }

    @Override
    protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
                                           MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

        HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();
        //如果不存在callback这个请求参数,直接返回,不需要处理为jsonp
              if ((servletRequest.getParameter("callback")==null)) {
                  return;
              }
              
        //按设定的请求参数(JsonAdvice构造方法中的this.jsonpQueryParamNames = new String[]{"callback"};),处理返回结果为jsonp格式
        for (String name : this.jsonpQueryParamNames) {
            String value = servletRequest.getParameter(name);
            if (value != null) {
                MediaType contentTypeToUse = getContentType(contentType, request, response);
                response.getHeaders().setContentType(contentTypeToUse);
                bodyContainer.setJsonpFunction(value);
                return;
            }
        }
    }
}

6、前台调用的地址

http://localhost/zzy-webapp/activiti/diagram-viewer/index.html?processDefinitionId=metaVersionProcess:1:12504&processInstanceId=212501

其中processDefinitionId是流程定义的ID,processInstanceId为流程实例的ID

就可以显示了。。

转载于:https://my.oschina.net/u/1986568/blog/789120

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值