在JSP页面中显示JBPM流程图

要在JSP页面中显示JBPM流程图需要先下载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里配置,配置方法:

 
 
 
  1.    
  2.    
  3.     ProcessImageServlet   
  4.     org.jbpm.webapp.servlet.ProcessImageServlet   
  5.    
  6.    
  7.     ProcessImageServlet   
  8.     /processimage   
  9.    

在页面中使用: 就会把流程图显示在当前位置。

在实际环境中可能会出现的问题与必要的修改

问题一

如果你是用spring整合的jbpm,那么在两个类里的取JbpmContext方法会出错。
 
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext(); //这个是会出问题的。

修改:

1.ProcessImageTag.java的private void initialize()方法里。

 
 
 
  1. WebApplicationContext wac = WebApplicationContextUtils.
    getRequiredWebApplicationContext(pageContext.getServletContext());   
  2.       JbpmTemplate jbpmTemplate = (JbpmTemplate) wac.getBean("jbpmTemplate");   
  3.       jbpmTemplate.execute(new JbpmCallback() {   
  4.           public Object doInJbpm(JbpmContext context) {   
  5.               if (taskInstanceId > 0) {   
  6.                   TaskInstance taskInstance = context.getTaskMgmtSession().loadTaskInstance(taskInstanceId);   
  7.                   currentToken = taskInstance.getToken();   
  8.               }   
  9.               else   
  10.               {   
  11.                   if (tokenInstanceId > 0)   
  12.                       currentToken = context.getGraphSession().loadToken(tokenInstanceId);   
  13.               }   
  14.               return null;   
  15.           }   
  16.       });   
 
 
 

  1. public class ProcessImageServlet extends HttpServlet {   
  2.     private static final long serialVersionUID = 1L;   
  3.     private ProcessDefinition processDefinition;   
  4.     private byte[] bytes;   
  5.  
  6.     protected void doGet(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException {   
  7.         final long processDefinitionId = Long.parseLong( request.getParameter( "definitionId" ) );   
  8.  
  9.         WebApplicationContext wac = WebApplicationContextUtils.
    getRequiredWebApplicationContext(request.getSession().getServletContext());   
  10.         JbpmTemplate jbpmTemplate = (JbpmTemplate) wac.getBean("jbpmTemplate");   
  11.         jbpmTemplate.execute(new JbpmCallback() {   
  12.             public Object doInJbpm(JbpmContext context) {   
  13.                 processDefinition = context.getGraphSession().loadProcessDefinition(processDefinitionId);   
  14.                 bytes = processDefinition.getFileDefinition().getBytes("processimage.jpg");   
  15.                 return null;   
  16.             }   
  17.         });   
  18.  
  19.         OutputStream out = response.getOutputStream();   
  20.         out.write(bytes);   
  21.         out.flush();   
  22.     }   
  23. }   

问题二

如果你的流程是用中文字符,且数据库字符集为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();

说明:有个地方要注意, 显示图片是以当前的路径为基础的。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 + ");

至此成功显示JBPM流程图。

网页题目:在JSP页面中显示JBPM流程图
浏览地址:http://www.shufengxianlan.com/qtweb/news39/257389.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联