jbpm]在JSP页面中显示JBPM流程图

xiaoxiao2022-06-12  31

[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流程图。 注:此文原创,转载请注明原文出处!http://hi.baidu.com/xiaolangs/blog/item/ea0625fb1d3ff061034f5685.html 相关资源:jbpm4.4 在线流程设计器,前端 java后台
转载请注明原文地址: https://www.6miu.com/read-4934122.html

最新回复(0)