成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在JSP頁面中顯示JBPM流程圖

開發 后端
本文向您介紹在JSP頁面中顯示JBPM流程圖,作者通過對Web.xml的配置和一些代碼實現了這個功能。

要在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. <!-- jBPM FileServlet -->   
  2. <servlet>   
  3.     <servlet-name>ProcessImageServlet</servlet-name>   
  4.     <servlet-class>org.jbpm.webapp.servlet.ProcessImageServlet</servlet-class>   
  5. </servlet>   
  6. <servlet-mapping>   
  7.     <servlet-name>ProcessImageServlet</servlet-name>   
  8.     <url-pattern>/processimage</url-pattern>   
  9. </servlet-mapping>   

在頁面中使用:<jbpm:processimage task="${taskBean.taskInstanceId}"/> 就會把流程圖顯示在當前位置。

在實際環境中可能會出現的問題與必要的修改

問題一

如果你是用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();

說明:有個地方要注意,<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 + ");

至此成功顯示JBPM流程圖。

 

【編輯推薦】

  1. jBPM 4.0配置淺析
  2. jBPM4的架構
  3. 淺談jBPM下MySQL的配置
  4. 簡單介紹jBPM與SSH的完整實例
  5. 使用JBPM工作流引擎測試的一個例子
責任編輯:佚名 來源: JavaEye
相關推薦

2009-03-05 10:10:52

餅圖數據庫JSP

2009-07-02 09:25:41

JSP實現頁面跳轉

2009-06-29 17:09:49

JavaBeanJSP

2020-07-28 21:38:24

跨職能流程圖

2009-06-04 15:51:46

Struts流程圖

2023-08-23 19:21:38

流程圖時序圖UML

2020-07-28 21:42:23

程序流程圖

2009-07-07 18:20:54

JSP頁面顯示亂碼

2010-03-24 16:08:55

紅旗Linux桌面版

2009-07-02 14:24:02

JSP讀取數據庫

2010-03-24 15:36:18

2024-08-16 18:48:45

2020-07-28 21:44:23

工藝流程圖

2009-11-09 13:23:35

WCF協定

2012-01-05 11:08:37

CISCO路由器啟動流程

2009-06-30 15:22:55

JSP頁面

2019-08-16 11:16:25

Java程序員流程圖

2012-06-07 09:48:12

開發流程圖

2020-07-28 21:39:54

生產流程圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频中文 | 四虎影院久久 | 操夜夜| 一本色道精品久久一区二区三区 | 国产一区二区三区四区在线观看 | 秋霞在线一区二区 | 少妇一区二区三区 | 国产精品乱码一区二区三区 | 久久综合伊人 | 日韩在线精品视频 | 日韩在线高清 | 日韩免费一区二区 | 99re热精品视频 | 做a网站 | 久久伊人操 | 欧美日韩国产一区二区三区 | 久草电影网 | 国产精品69毛片高清亚洲 | 欧美高清一级片 | 日本久久久一区二区三区 | 欧美精品日韩精品国产精品 | 国产精品日韩欧美一区二区三区 | 不卡一二三区 | 中文字幕亚洲欧美日韩在线不卡 | 欧美男人天堂 | 精品一区二区三区在线观看国产 | 欧美 日本 国产 | 日韩欧美三区 | 国产免费av在线 | 97人人澡人人爽91综合色 | 精品一区二区三区91 | 网页av| 91久久久久 | 国产999精品久久久 精品三级在线观看 | 亚洲视频一区在线 | 午夜视频精品 | 日日久 | 99国产精品99久久久久久粉嫩 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 亚洲国产片 | 欧美三区在线观看 |