Struts2+Extjs进行jbpm的流程部署

     写这篇文章前,纠结了一下,这文章分到哪个类别下呢?Struts2?jbpm?还是Extjs?哈,最后就放到struts2下了,因为这个类别里没有文章咯。

     这是利用Struts2+Hibernate+Spring+JbPM4.3+ExtJs实现一个工作流管理平台的中一个小小环节,不过这个环节也是折腾了我好长时间,所以就写下来,算是对自己的总结,还希望能帮助到遇到相同问题的同仁。

   好了,先贴下代码,然后容易出问题,出错的地方,我会在代码中标注。

  显示前台的上传zip或者xml的FormPanel的js:

  var form1 = new Ext.form.FormPanel({ title: '文件上传', labelWidth: 60, frame:true, width: 300, height:100, fileUpload: true, id:'uploadform', method:'POST', enctype:'multipart/form-data', items: [{ xtype: 'textfield', fieldLabel: '文件名', name: 'upload', /*这里的name一定要和action中的属性保持名称一致*/ id:'upload', inputType: 'file'//文件类型 }], buttons: [{ text: '上传', handler: function() { if (form1.form.isValid()) { Ext.getCmp("uploadform").getForm().submit({ /*这里请求的url要和action中定义的name一致起来*/ url : "deploy.action", /*文件上传的话下面这两句一定要写 method:'POST', enctype:'multipart/form-data', success : function() { Ext.MessageBox.alert('上传成功','流程部署成功!'); }, failure : function() { Ext.MessageBox.show({title:'上传失败',msg:'流程部署失败!',buttons: Ext.MessageBox.OK,width:300,icon : Ext.Msg.ERROR}); }, waitMsg : '正在保存数据,稍后...' }); Ext.getCmp("deployWin").hide();/*获取到外层的window*/ } else { Ext.Msg.alert('信息', '请先选择上传文件再提交!'); } } },{text:'取消',handler:function(){Ext.getCmp("deployWin").hide();}}] });

  再次提醒哈子,这里的文件上传域的name一定要保持和action中属性一致。

  接下来找个容器放这个panel:

  /** * 用来放置流程定义文件上传的formpanel * @return */ function processDefinition() { var win=new Ext.Window({title:"流程定义", width:360, maximizable:true, items:[form1], id:'deployWin', modal:true }); win.show(); }

写这些js的时候也是捣鼓了一些时间,刚开始在action段设置了一个断点,结果总是提示我upload为null,说明我没有从form表单中获取到信息,哎呀,纠结的,原来就是因为名称没有对应好的问题,下面在action中加了一段注释,大伙这边一定要注意了。

对应的action:

package net.gicp.xhf1989.MyPrj.flow.action; import java.io.File; import java.io.IOException; import javax.servlet.ServletException; import net.gicp.xhf1989.MyPrj.base.action.BaseAction; import net.gicp.xhf1989.MyPrj.flow.service.ProcessService; import org.apache.commons.fileupload.FileUploadException; /** * 流程部署action * @author xhf * */ public class ProcessAction extends BaseAction{ private static final long serialVersionUID = 1L; private File upload;//上传的文件,这里的属性名保持和前台js的文件上传域的name一致 private String uploadFileName; /* * 其实这里的原因也好理解,我们通过前台js的控件的name和后台属性名称一致,同时根据属性的set方法,就可以把前台的请求参数传给Action实例, 但是文件名称和类型,我们无法并没有直接在前台采用name相对应啊,那怎么弄呢?所以要靠前台的上传文件域名称+FileName,+ContentType, 如果大家不想出错,最好也跟我写成一样的。 */ private String uploadContentType; private ProcessService processService;//service服务类 public ProcessService getProcessService() { return processService; } public void setProcessService(ProcessService processService) { this.processService = processService; } /** * 流程定义文件上传 * @throws FileUploadException * @throws IOException * @throws ServletException */ public void deploy() { this.getResponse().setCharacterEncoding("UTF-8"); this.getResponse().setContentType("text/html"); this.jsonString="{success:false;errors:'部署失败'}"; if(upload!=null) { if(this.processService.deploy(upload, uploadFileName)){ this.jsonString="{success:true}"; } } try { getResponse().getWriter().write(this.jsonString); } catch (Exception e) { e.printStackTrace(); } } //get/set方法 public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } }

action中的deploy方法是我设计到jbpm的流程部署的东西,在此我就不贴出来了,不过文件上传的处理想必大家一定了解,如果碰巧也是做JBPM流程定义的,可以给我留言,我单独把相关deploy方法发给你。

你可能感兴趣的:(struts,String,jbpm,upload,action,ExtJs)