包导入完成 springboot app 主函数启动之后 (先不写controller 先测试 app 是否能启动 因为 数据库得url 后面如果不配置什么参数会整一堆问题例如 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized
所以先保证启动)
activiti 文件目录 (你自己创建目录也可以,需要了解 java 读取文件和文件相对路径理解很好能自己找到就好 反正我找不到)springboot 不写配置文件默认静态文件在 static 里面应该
启动成功后创建一个controller 创建一个请求
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
@Controller
@RequestMapping("/index")
public class IndexController {
@Autowired
RepositoryService repositoryService;
@Autowired
ObjectMapper objectMapper;
@RequestMapping("/modeler")
public void sendRedirectModeler(HttpServletRequest request, HttpServletResponse response) throws IOException {
//以下部分代码均为写死
//初始化一个空模型
Model model = repositoryService.newModel();
//设置一些默认信息
String name = "new-process";
String description = "";
int revision = 1;
String key = "process";
ObjectNode modelNode = objectMapper.createObjectNode();
modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
model.setName(name);
model.setKey(key);
model.setMetaInfo(modelNode.toString());
repositoryService.saveModel(model);
String id = model.getId();
//完善ModelEditorSource
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
stencilSetNode.put("namespace",
"http://b3mn.org/stencilset/bpmn2.0#");
editorNode.put("stencilset", stencilSetNode);
repositoryService.addModelEditorSource(id,editorNode.toString().getBytes("utf-8"));
//下面得id 一定不要瞎改
response.sendRedirect(request.getContextPath() + "/activiti/modeler.html?modelId="+id);
}
在浏览器打开f12 现在直接请求 接口 ip:port/index/modeler
如果出现一下界面并且是这个json 错误(activiti/activitiService/model/5001/json 404) 整明成功5001是跟请求对应得不一定5001 可能别的数字
在ide 中搜索 activitiService 可以找到一个 editor-app/app-cfg.js 文件夹 activiti这个大路径我不知道在哪改 这个activitiService 可以更改 或者 直接不更改写一个 controller 就是activiti/activitiService/model/{modelId}/json 请求
又是啥都不用改得代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.InputStream;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Tijs Rademakers
*/
@RestController
@RequestMapping("/activiti/activitiService")
public class ModelEditorJsonRestResource implements ModelDataJsonConstants {
protected static final Logger LOGGER = LoggerFactory.getLogger(ModelEditorJsonRestResource.class);
@Autowired
private RepositoryService repositoryService;
@Autowired
private ObjectMapper objectMapper;
@RequestMapping(value="/model/{modelId}/json", method = RequestMethod.GET, produces = "application/json")
public ObjectNode getEditorJson(@PathVariable String modelId) {
ObjectNode modelNode = null;
Model model = repositoryService.getModel(modelId);
if (model != null) {
try {
if (StringUtils.isNotEmpty(model.getMetaInfo())) {
modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
} else {
modelNode = objectMapper.createObjectNode();
modelNode.put(MODEL_NAME, model.getName());
}
modelNode.put(MODEL_ID, model.getId());
ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
modelNode.put("model", editorJsonNode);
} catch (Exception e) {
LOGGER.error("Error creating model JSON", e);
throw new ActivitiException("Error creating model JSON", e);
}
}
return modelNode;
}
再次请求发现
prototype-1.5.1.js:1045 GET http://localhost:8800/activiti/activitiService/editor/stencilset?version=1605667479842 404
angular.min.js:85 Loading stencil set http://b3mn.org/stencilset/bpmn2.0%23 failed.
这个请求路径 就是刚才得请求 错误总要一个一个解决 下面得什么乱七八糟 failed 先放着
在上面那个代码 那个ModelEditorJsonRestResource 类下添加一个方法 又是写死得方法
@RequestMapping(value="/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
public @ResponseBody
String getStencilset() {
//stencilset.json 读取这个文件需要 自己心思文件路径 如果跟我得路径一样这么写事不会报空指针异常
InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("static/activiti/stencilset.json");
try {
return IOUtils.toString(stencilsetStream, "utf-8");
} catch (Exception e) {
throw new ActivitiException("Error while loading stencil set", e);
}
}
添加完再次请求 编辑页面得资源 已经能全部加载