[jbpm]在JSP页面中显示JBPM流程图2008-07-10 14:20下载jbpm-starters-kit-3.1.x工具包。在包中有. java文件,\jbpm.3\src\java.webapp\org\jbpm\webapp\tag\ProcessImageTag.java与 他的\WEB-INF\jbpm.tld,还有文件\jbpm.3\src\java.webapp\org\jbpm\webapp\servlet\ ProcessImageServlet.java,在JBPM的例子里,这三个文件共同完成JBPM流程图的显示。
要使两个文件发生作用,必须得在web.xml里配置,配置方法:
<!-- jBPM FileServlet -->
<servlet>
<servlet-name>ProcessImageServlet</servlet-name>
<servlet-class>org.jbpm.webapp.servlet.ProcessImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProcessImageServlet</servlet-name>
<url-pattern>/processimage</url-pattern>
</servlet-mapping>
在页面中使用:<jbpm:processimage task="${taskBean.taskInstanceId}"/> 就会把流程图显示在当前位置。
在实际环境中可能会出现的问题与必要的修改
问题一
如果你是用spring整合的jbpm,那么在两个类里的取JbpmContext方法会出错。
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext(); //这个是会出问题的。
修改:
1).ProcessImageTag.java的private void initialize()方法里。
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(pageContext.getServletContext());
JbpmTemplate jbpmTemplate = (JbpmTemplate) wac.getBean("jbpmTemplate");
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext context) {
if (taskInstanceId > 0) {
TaskInstance taskInstance = context.getTaskMgmtSession().loadTaskInstance(taskInstanceId);
currentToken = taskInstance.getToken();
}
else
{
if (tokenInstanceId > 0)
currentToken = context.getGraphSession().loadToken(tokenInstanceId);
}
return null;
}
});
2).
public class ProcessImageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ProcessDefinition processDefinition;
private byte[] bytes;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final long processDefinitionId = Long.parseLong( request.getParameter( "definitionId" ) );
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
JbpmTemplate jbpmTemplate = (JbpmTemplate) wac.getBean("jbpmTemplate");
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext context) {
processDefinition = context.getGraphSession().loadProcessDefinition(processDefinitionId);
bytes = processDefinition.getFileDefinition().getBytes("processimage.jpg");
return null;
}
});
OutputStream out = response.getOutputStream();
out.write(bytes);
out.flush();
}
}
问题二
如果你的流程是用中文字符,且数据库字符集为utf-8,再数据库中为正确的utf-8内容,也可能会乱码错误。
如:我的数据库里的gpd.xml
出错的类:ProcessImageTag.java
出错行:result[0] = Integer.valueOf(node.attribute("x").getValue());
如果此地为nullpoint错误,是因为上下文的Element root中的字符为乱码。
修改:
原代码:Element rootDiagramElement = DocumentHelper.parseText(new String(gpdBytes)).getRootElement();
修改后:Element rootDiagramElement = DocumentHelper.parseText(new String(gpdBytes, "utf-8")).getRootElement();
说明:有个地方要注意,<jbpm:processimage task="${taskBean.taskInstanceId}"/> 显示图片是以当前的路径为基础的。style="background-image:url(processimage?definitionId=1) ",也就是说当页面为:http://localhost/jbpm/workflow/showTaskInstance.jsp时,你所访问的流程图地址为:http://localhost/jbpm/workflow/processimage?definitionId=1,这个地址是错误的,实际地址为:http://localhost/jbpm/processimage?definitionId=1,要正确显示需修改ProcessImageTag.java
原代码:background-image:url(" + imageLink + ");
修改后:background-image:url(" + ((HttpServletRequest) pageContext.getRequest()).getContextPath() + "/" + imageLink + ");
OK,恭喜你成功显示JBPM流程图。
分享到:
相关推荐
本主题将详细介绍如何将jbpm流程图显示在JSP(JavaServer Pages)页面上,这涉及到jbpm的图像标签库(taglib)和`web.xml`配置文件的使用。 首先,jbpm提供的图像标签库允许开发者在JSP页面中直接嵌入流程图。`jbpm...
1. 设计和建模:使用BPMN(Business Process Model and Notation)工具绘制工作流程图,并导出为jbpm可识别的格式。 2. 编码:编写Java服务类实现业务逻辑,以及Servlet处理HTTP请求。 3. 配置:设置数据库连接,...
在JBoss JBPM4中,我们可以使用jbpm-designer工具来设计流程图,然后将其导出为XML格式的.bpel文件。 2. **请假申请任务**:流程开始时,员工提交请假申请,这对应于一个任务节点。任务数据可能包括请假人、请假...
流程图中包含了开始事件、结束事件、用户任务、服务任务等元素,它们通过连接线进行连接,指示流程的流转方向。 用户任务通常对应于需要人工干预的环节,比如员工提交请假申请,经理审批等。服务任务则可以是与...
在这个借款例子中,JSP页面可能包含了用户输入表单、显示流程状态、处理用户请求等功能。开发者可能使用JSP标签库(Tag Libraries)来简化代码,例如JSTL(JavaServer Pages Standard Tag Library),它提供了一系列...
流程设计器是JBPM提供的一种图形化工具,用户可以通过拖拽和配置节点来直观地创建流程图。这个工具使得非技术人员也能参与到流程设计中,提高了工作效率。在视频中,讲解者将引导你逐步操作流程设计器,创建并保存...
通过jbpm,你可以设计流程图,定义流程中的各个步骤、决策点、并行分支和事件,并将其转换为可执行的代码。 项目中包含的"web版"部分意味着你将在Web应用程序中实现jbpm的功能。这通常涉及到在Java应用服务器(如...
开发者可以通过jbpm-gwt-console(通常包含在webjbpm中)来设计流程图,并将其转换为XML格式的流程定义文件(.bpmn20.xml)。这些文件随后可以在应用程序中加载,供用户启动和跟踪流程实例。 在这个例子中,webjbpm...
在jbpm中,流程可以通过工作流图(Workflow Diagram)清晰地表示出来,每个节点代表一个任务或者决策,而线条则表示任务间的流转关系。 由于压缩包中未包含jar文件,用户需要自行从jbpm的官方网站下载,或者通过...
4. **workflow.JPG** - 可能是一个流程图,展示jBPM4中的工作流实例,帮助开发者理解和跟踪流程执行。 5. **FillLeaveForm.jsp** - 这是一个JSP(Java Server Pages)文件,可能用于员工填写请假申请的界面,用户...
9. **编写人机交互页面**:使用SSH框架的视图层(如JSP)开发用户界面,用于展示流程状态和进行操作。 10. **编写后台程序**:结合Spring的依赖注入,编写服务层代码来处理流程的启动、审批等业务逻辑。 在实际...
jbpm学习笔记主要涵盖了jbpm(Java Business Process Management)的多个方面,包括Signavio的使用和配置、jBPM数据库的安装、Graphical Process Designer(GPD)的安装以及jBPM在Eclipse环境中的配置。以下是这些...
这通常在Spring配置文件中完成,通过定义bean来注入所需的JBPM组件。 在运行时,当用户提交请假申请后,流程引擎会根据`leave.jpdl.xml`文件中的定义来驱动流程的执行,处理任务的分配、流转和状态变更。同时,你...
1. **流程定义与执行**:jbpm3.1.2支持BPMN(Business Process Modeling Notation)标准,允许开发者通过图形化的方式设计流程图,然后将这些流程图转化为可执行的流程定义。它还提供了流程实例的启动、暂停、恢复和...
jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者在Java应用程序中实现复杂的业务流程。jBPM4.4是该框架的一个较早版本,但仍然具有广泛的适用性和学习价值。在这个...
- **节点与连接**: 流程图中的节点表示流程的步骤,连接则表示步骤之间的转移条件。 2. **jbpm4.4 API 使用** - **ProcessEngine**: jbpm的核心组件,负责流程的生命周期管理,如启动、暂停、继续和结束流程。 -...
【jbpm4.4 工程项目实例】是一个基于jbpm工作流引擎的Web应用程序,旨在提供一个实际操作的示例,帮助开发者了解如何在实际项目中应用jbpm。jbpm是一个开源的工作流管理系统,它支持业务流程建模、部署、执行以及...
1. **流程定义(Process Definition)**: 在JBPM4中,业务流程以BPMN2(Business Process Model and Notation 2.0)的XML文件形式进行定义,包含了流程图中的各个节点和连接线,如任务(Task)、事件(Event)、网关...