要在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里配置,配置方法:
ProcessImageServlet org.jbpm.webapp.servlet.ProcessImageServlet ProcessImageServlet /processimage
在页面中使用:
在实际环境中可能会出现的问题与必要的修改
问题一
如果你是用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;
- }
- });
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();
说明:有个地方要注意,
原代码:background-image:url(" + imageLink + ");
修改后:background-image:url(" + ((HttpServletRequest) pageContext.getRequest()).getContextPath() + "/" + imageLink + ");
至此成功显示JBPM流程图。
本文名称:在JSP页面中显示JBPM流程图
链接分享:http://www.mswzjz.cn/qtweb/news39/257389.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能