package lx.demo.web.controller;
import lx.demo.web.base.UserUtil;
import lx.demo.web.base.AbstractController;
import org.activiti.engine.form.FormProperty;
import org.activiti.engine.form.StartFormData;
import org.activiti.engine.identity.User;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* 流程定义相关功能:读取动态表单字段、读取外置表单内容
*
*
*/
@Controller
@RequestMapping(value = "/task")
public class ProcessDefinitionController extends AbstractController {
/**
* 读取启动流程的表单字段
*/
@RequestMapping(value = "getform/start/{processDefinitionId}")
public ModelAndView readStartForm(@PathVariable("processDefinitionId") String processDefinitionId) throws Exception {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
boolean hasStartFormKey = processDefinition.hasStartFormKey();
// 根据是否有formkey属性判断使用哪个展示层
String viewName = "task/start-process-form";
ModelAndView mav = new ModelAndView(viewName);
// 判断是否有formkey属性
if (hasStartFormKey) {
Object renderedStartForm = formService.getRenderedStartForm(processDefinitionId);
mav.addObject("startFormData", renderedStartForm);
mav.addObject("processDefinition", processDefinition);
} else { // 动态表单字段
StartFormData startFormData = formService.getStartFormData(processDefinitionId);
mav.addObject("startFormData", startFormData);
}
mav.addObject("hasStartFormKey", hasStartFormKey);
mav.addObject("processDefinitionId", processDefinitionId);
return mav;
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "process-instance/start/{processDefinitionId}")
public String startProcessInstance(@PathVariable("processDefinitionId") String pdid, HttpServletRequest request, RedirectAttributes redirectAttributes) {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(pdid).singleResult();
boolean hasStartFormKey = processDefinition.hasStartFormKey();
Map<String, String> formValues = new HashMap<String, String>();
if (hasStartFormKey) { // formkey表单
Map<String, String[]> parameterMap = request.getParameterMap();
Set<Entry<String, String[]>> entrySet = parameterMap.entrySet();
for (Entry<String, String[]> entry : entrySet) {
String key = entry.getKey();
formValues.put(key, entry.getValue()[0]);
}
} else { // 动态表单
// 先读取表单字段在根据表单字段的ID读取请求参数值
StartFormData formData = formService.getStartFormData(pdid);
// 从请求中获取表单字段的值
List<FormProperty> formProperties = formData.getFormProperties();
for (FormProperty formProperty : formProperties) {
String value = request.getParameter(formProperty.getId());
formValues.put(formProperty.getId(), value);
}
}
// 获取当前登录的用户
User user = UserUtil.getUserFromSession(request.getSession());
// 用户未登录不能操作,实际应用使用权限框架实现,例如Spring Security、Shiro等
if (user == null || StringUtils.isBlank(user.getId())) {
return "redirect:/login?timeout=true";
}
identityService.setAuthenticatedUserId(user.getId());
// 提交表单字段并启动一个新的流程实例
ProcessInstance processInstance = formService.submitStartFormData(pdid, formValues);
logger.debug("start a processinstance: {}", processInstance);
redirectAttributes.addFlashAttribute("message", "流程已启动,实例ID:" + processInstance.getId());
return "redirect:/process/process-list";
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
cet.rar (63个子文件)
cet
pom.xml 2KB
target
test-classes
m2e-wtp
web-resources
META-INF
maven
lx.test
cet
pom.xml 2KB
pom.properties 204B
MANIFEST.MF 106B
classes
com
mkfree
demo
controller
HelloworldController.class 1KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.core.resources.prefs 155B
org.eclipse.wst.common.component 652B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.validation.prefs 50B
.jsdtscope 575B
org.eclipse.jdt.core.prefs 430B
src
test
java
main
webapp
css
bootstrap-responsive.min.css 15KB
bootstrap.min.css 112KB
datepicker.css 4KB
bootstrap.css 130KB
menu.css 665B
bootstrap-responsive.css 20KB
style.css 78B
helloworld.jsp 247B
img
glyphicons-halflings.png 12KB
glyphicons-halflings-white.png 9KB
WEB-INF
web.xml 2KB
views
process
process-list.jsp 2KB
main
welcome.jsp 528B
index.jsp 3KB
task
task-form.jsp 3KB
task-list.jsp 2KB
start-process-form.jsp 3KB
classes
com
mkfree
demo
controller
HelloworldController.class 1KB
lx
demo
web
base
ActivitiUtils.class 702B
AbstractController.class 2KB
UserUtil.class 1KB
controller
DeploymentController.class 5KB
MainController.class 741B
UseController.class 3KB
TaskController.class 6KB
ProcessDefinitionController.class 6KB
activiti.cfg.xml 762B
spring
spring-servlet.xml 2KB
js
common
jquery.js 92KB
bootstrap-datepicker.js 13KB
bootstrap.min.js 25KB
modules
main
main.js 953B
login.jsp 770B
common
include-base-styles.jsp 323B
global.jsp 354B
meta.jsp 212B
resources
activiti.cfg.xml 762B
spring
spring-servlet.xml 2KB
java
com
mkfree
demo
controller
HelloworldController.java 591B
lx
demo
web
base
AbstractController.java 1KB
ActivitiUtils.java 663B
UserUtil.java 741B
controller
MainController.java 463B
DeploymentController.java 4KB
UseController.java 2KB
TaskController.java 4KB
ProcessDefinitionController.java 5KB
.project 1KB
.classpath 1KB
共 63 条
- 1
资源评论
- 刘献盎2017-09-29与标题不符是个假的
- II_Bat2016-03-18看上去很简单,activiti5.18与spring mvc 集成,特别适合新手入门。没有复杂的explore嵌入,能够通过这个demo快速的在自己项目中使用activiti。
- 沙漠飘雪2021-07-22与标题不符是个假的
alex709261649
- 粉丝: 1
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功