activiti5显示流程图

从数据库中以输入流的方式读取出图片数据,然后在jsp页面中读取输入流,以图片的格式显示出图片。  

InputStream中实际上就是流程图,然后就是以怎样的相应格式显示InputStream中的内容。


service层

  /**

       * 读取带跟踪的图片
       */
    public InputStream readResource(String executionId){
        InputStream imageStream = null;
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(executionId).singleResult();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
        List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);
        ProcessEngineImpl defaultProcessEngine = (ProcessEngineImpl) ProcessEngines.getDefaultProcessEngine();
        
        Context.setProcessEngineConfiguration(defaultProcessEngine.getProcessEngineConfiguration());
        Context.setProcessEngineConfiguration(((ProcessEngineImpl) processEngine).getProcessEngineConfiguration());
        
        imageStream = ProcessDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds);
        
        return imageStream;

    }


struts2 action中

    //从数据库中得到运行流程图,带标红
    public String readResource(){
        HttpServletResponse response = ServletActionContext.getResponse();
        HttpServletRequest request = ServletActionContext.getRequest();
        ActivitiController activitiController = new ActivitiController();
        InputStream imageStream = activitiController.readResource(processInstanceId);
        request.setAttribute("inputStream", imageStream);
        
        /*byte[] b = new byte[1024];
        int len = -1;
        try {
            while ((len = imageStream.read(b, 0, 1024)) != -1) {
                response.getOutputStream().write(b, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }*/
        
        return "showImage";
    }


jsp页面    需要设置response的相应格式

    <%
        response.setContentType("image/png;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        InputStream is = (InputStream)request.getAttribute("inputStream");
        byte[] b = new byte[1024];
        int len = -1;
        while((len = is.read(b, 0, 1024)) != -1) {
            response.getOutputStream().write(b, 0, len);
            // 防止异常:getOutputStream() has already been called for this response
            out.clear();
            out = pageContext.pushBody();
        }    
    %>

或者

struts2 action中

    //从数据库中得到运行流程图,带标红
    public String readResource(){
        HttpServletResponse response = ServletActionContext.getResponse();
        HttpServletRequest request = ServletActionContext.getRequest();
        ActivitiController activitiController = new ActivitiController();
        InputStream imageStream = activitiController.readResource(processInstanceId);
        request.setAttribute("inputStream", imageStream);
        
        byte[] b = new byte[1024];
        int len = -1;
        try {
            while ((len = imageStream.read(b, 0, 1024)) != -1) {
                response.getOutputStream().write(b, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return null;
    }

在jsp页面中用

<img src="<%=basePath%>oa/leaveAction!readResource"/>   以图片的方式自动加载


你可能感兴趣的:(Activiti)