jbpm的包中提供了显示流程图所用的三个主要文件。可通过 jbpm-starters-kit-3.1.x得到。分别是\jbpm\src\java.webapp\org\jbpm\webapp\tag\ProcessImageTag.java、\jbpm\build\jbpm.war.dir\WEB-INF,和\jbpm\src\java.webapp\org\jbpm\webapp\servlet\ ProcessImageServlet.java。在JBPM的例子里,这三个文件共同完成JBPM流程图的显示。
步骤:
(1)在web.xml中配置servlet。我的例子中,把servlet放在了demo.workflow.servlet包中,故在web.xml中配置如下:
<servlet>
<servlet-name>processImageServlet</servlet-name>
<servlet-class>demo.workflow.servlet.ProcessImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>processImageServlet</servlet-name>
<url-pattern>/processimage</url-pattern>
</servlet-mapping>
(2)将jbpm.tld文件拷贝到web-inf下。引入 \ProcessImageTag.java文件并在jbpm.tld中配置。我将 ProcessImageTag.java放在demo.workflow.tag包中,故而在jbpm.tld中将<tagclass>标签修改如下:
<tagclass>demo.workflow.tag.ProcessImageTag</tagclass>
(3)建立显示流程图的页面process-img.jsp。代码如下(注意引入了jbpm标签文件):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/jbpm.tld" prefix="jbpm" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
long tokenId=Long.parseLong(request.getParameter("tokenId"));
%>
<jbpm:processimageToken token="<%=tokenId %>"/>
</body>
</html>
------------------------------------------------------------------
(4)在主页中建立对process-img.jsp的引用。注意要给出tokenId这个参数。在href中加入变量的方法是直接用 =<%=id%>的方式。
<a href="/TestJbpm/process-img.jsp?tokenId=<%=id%>">查看流程</a>
运行时点击查看流程就看到标记了执行位置的流程图了。
基本原理:发布流程时,共发布了三个文件,definition、gpd和一个image图片。其中,gpd是各结点的位置信息。图片保存在jbpm_byteblock表中,其他图片信息保存在jbpm_bytearray表中。显示流程图时,首先从表中把image取出,作为背景,然后利用gpd中的结点位置信息在背景图上画上红框。
注意:要用到jaxen.jar包。