activiti自定义流程之自定义表单(二):创建表单

在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进行修改。


由于自己的前端相关技术太渣,因此好多东西都不会用,导致修改实现的过程也是破费了一番功夫,头皮发麻了好几天。

既然是用别人的插件进行修改,那么我想如果只是单独的贴出我修改后的代码,可能没有前后进行对比好理解,因此这里就把原代码和修改后的同时对比着贴出,以便于朋友们能从对比中更快的得到启发。

一、首先是前台创建表单,原文件示例是所有代码直接都写在了index.html文件中,文件在文章最后:

我在修改的过程中感觉这个代码太长,貌似有点杂乱,因此就自作主张的把部分内容提取到了新建的js文件中,还有部分我觉得无关紧要的东西也进行了删除,然后我的index.html代码如下:


[html]  view plain  copy
 
  1. <!DOCTYPE HTML>  
  2. <html>  
  3.  <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">  
  6.     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
  7.     <link href="css/bootstrap/css/bootstrap.css?2023" rel="stylesheet" type="text/css" />  
  8.     <link href="css/site.css?2023" rel="stylesheet" type="text/css" />  
  9.     <link href="my_css/a.css" rel="stylesheet" type="text/css" />  
  10.     <script type="text/javascript">  
  11.         var _root='http://form/index.php?s=/',_controller = 'index';  
  12.     </script>   
  13.  </head>  
  14. <body style="margin:0">  
  15. <!-- fixed navbar -->  
  16. <!-- Docs page layout -->  
  17. <div style="width:100%;height:60px;background-color:#ccf;border:1px solid blue;text-decoration:none">  
  18.      <img src="images/activiti.png" style="width:20%;height:98%;overflow:hidden;float:left"/>  
  19.      <ul style="margin-left:30px;margin-top:10px; padding: 0px; font-size: 30px; width:60%;overflow:hidden;float:left">  
  20.         <li><a href="#" onclick="toAdd();">新增表单</a></li>  
  21.         <li> | </li>  
  22.         <li><a href="#" onclick="formList();">表单列表</a></li>  
  23.      </ul>  
  24. </div>  
  25. <div id="idv1" style="width:100%;position: absolute;height:auto">  
  26. <div style="width:70px;height:550px;position:relative;float:left;border:1px solid blue;background-color:#ccf">  
  27.     
  28. </div>  
  29. <div id="formDiv" style="width:89%;height:auto;position:relative;float:left;margin-left:10px;margin-top:10px;">  
  30.   
  31.   
  32. <div class="container">  
  33. <form method="post" id="saveform" name="saveform" action="/index.php?s=/index/parse.html">  
  34. <input type="hidden" name="fields" id="fields" value="0">  
  35. <div style="width:98%;height:510px;margin-top:20px;border:3px solid grey">  
  36.   <p style="margin-top:10px;font-size:30px" >表单名称:<input type="text" id="formType"></input></p>  
  37.   <hr style="height:5px;border:none;border-top:5px ridge green;"/>  
  38.   <p style="margin-top:10px;font-size:30px" >表单设计:</p>  
  39.  <div >  
  40. <p style="left:30px">  
  41.         <button type="button" onclick="leipiFormDesign.exec('text');" class="btn btn-info">文本框</button>  
  42.         <button type="button" onclick="leipiFormDesign.exec('textarea');" class="btn btn-info">多行文本</button>  
  43.         <button type="button" onclick="leipiFormDesign.exec('select');" class="btn btn-info">下拉菜单</button>  
  44.         <button type="button" onclick="leipiFormDesign.exec('radios');" class="btn btn-info">单选框</button>  
  45.         <button type="button" onclick="leipiFormDesign.exec('checkboxs');" class="btn btn-info">复选框</button>         
  46.         <button type="button" onclick="leipiFormDesign.exec('listctrl');" class="btn btn-info">列表控件</button>  
  47.        <!--   <button type="button" onclick="leipiFormDesign.findForm();" class="btn btn-info">form</button>-->  
  48. </p>  
  49.   
  50.   
  51. </div>  
  52. <!-- afsddddddddd -->  
  53. <div >  
  54. <script id="myFormDesign" type="text/plain" style="width:99.8%;">  
  55. </script>  
  56. </div>     
  57. </div>  
  58. <!-- afsddddddddd -->  
  59. <div class="row">  
  60.   
  61.   
  62. </div><!--end row-->  
  63. </form>  
  64. </div><!--end container-->  
  65. <script type="text/javascript" charset="utf-8" src="js/jquery-1.7.2.min.js?2023"></script>  
  66. <script type="text/javascript" charset="utf-8" src="js/ueditor/ueditor.config.js?2023"></script>  
  67. <script type="text/javascript" charset="utf-8" src="js/ueditor/ueditor.all.js?2023"> </script>  
  68. <script type="text/javascript" charset="utf-8" src="js/ueditor/lang/zh-cn/zh-cn.js?2023"></script>  
  69. <script type="text/javascript" charset="utf-8" src="js/ueditor/formdesign/leipi.formdesign.v4.js?2023"></script>  
  70. <!-- script start-->    
  71. <script type="text/javascript" charset="utf-8" src="my_js/addForm.js"></script>  
  72. <!-- script end -->  
  73. <div style="width:1px;height:1px">  
  74.   <script type="text/javascript">  
  75.   var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");  
  76.   document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F1e6fd3a46a5046661159c6bf55aad1cf' type='text/javascript'%3E%3C/script%3E"));  
  77.   </script>  
  78. </div>  
  79.   
  80.   
  81. </div>  
  82. </div>  
  83. </body>  
  84. </html>  

相关的js文件命名为addForm.js如下:


[javascript]  view plain  copy
 
  1. function toAdd(){  
  2.     window.location.href="./";   
  3. };  
  4. function formList(){  
  5.     window.location.href="my_views/formList.html";   
  6. };  
  7.   
  8.   
  9. var leipiEditor = UE.getEditor('myFormDesign',{  
  10.             toolleipi:true,//是否显示,设计器的 toolbars  
  11.             textarea: 'design_content',     
  12.             //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个  
  13.            toolbars:[[  
  14.             ]],  
  15.             //关闭字数统计  
  16.             wordCount:false,  
  17.             //关闭elementPath  
  18.             elementPathEnabled:false,  
  19.             //默认的编辑区域高度  
  20.             initialFrameHeight:300  
  21.             //,iframeCssUrl:"css/bootstrap/css/bootstrap.css" //引入自身 css使编辑器兼容你网站css  
  22.             //更多其他参数,请参考ueditor.config.js中的配置项  
  23.         });  
  24.   
  25.   
  26.  var leipiFormDesign = {  
  27.     findForm : function(){  
  28.         window.location.href="my_views/formList.html";  
  29.     },  
  30.     /*执行控件*/  
  31.     exec : function (method) {  
  32.         leipiEditor.execCommand(method);  
  33.     },  
  34.     /* 
  35.         Javascript 解析表单 
  36.         template 表单设计器里的Html内容 
  37.         fields 字段总数 
  38.     */  
  39.    parse_form:function(template,fields)  
  40.     {  
  41.         //正则  radios|checkboxs|select 匹配的边界 |--|  因为当使用 {} 时js报错  
  42.         var preg =  /(\|-<span(((?!<span).)*leipiplugins=\"(radios|checkboxs|select)\".*?)>(.*?)<\/span>-\||<(img|input|textarea|select).*?(<\/select>|<\/textarea>|\/>))/gi,preg_attr =/(\w+)=\"(.?|.+?)\"/gi,preg_group =/<input.*?\/>/gi;  
  43.         if(!fields) fields = 0;  
  44.         var template_parse = template,template_data = new Array(),add_fields=new Object(),checkboxs=0;  
  45.         var pno = 0;  
  46.         template.replace(preg, function(plugin,p1,p2,p3,p4,p5,p6){  
  47.             var parse_attr = new Array(),attr_arr_all = new Object(),name = '', select_dot = '' , is_new=false;  
  48.             var p0 = plugin;  
  49.             var tag = p6 ? p6 : p4;  
  50.             //alert(tag + " \n- t1 - "+p1 +" \n-2- " +p2+" \n-3- " +p3+" \n-4- " +p4+" \n-5- " +p5+" \n-6- " +p6);  
  51.             if(tag == 'radios' || tag == 'checkboxs')  
  52.             {  
  53.                 plugin = p2;  
  54.             }else if(tag == 'select')  
  55.             {  
  56.                 plugin = plugin.replace('|-','');  
  57.                 plugin = plugin.replace('-|','');  
  58.             }  
  59.             plugin.replace(preg_attr, function(str0,attr,val) {  
  60.                     if(attr=='name')  
  61.                     {  
  62.                         if(val=='leipiNewField')  
  63.                         {  
  64.                             is_new=true;  
  65.                             fields++;  
  66.                             val = 'data_'+fields;  
  67.                         }  
  68.                         name = val;  
  69.                     }  
  70.                       
  71.                     if(tag=='select' && attr=='value')  
  72.                     {  
  73.                         if(!attr_arr_all[attr]) attr_arr_all[attr] = '';  
  74.                         attr_arr_all[attr] += select_dot + val;  
  75.                         select_dot = ',';  
  76.                     }else  
  77.                     {  
  78.                         attr_arr_all[attr] = val;  
  79.                     }  
  80.                     var oField = new Object();  
  81.                     oField[attr] = val;  
  82.                     parse_attr.push(oField);  
  83.             })   
  84.             /*alert(JSON.stringify(parse_attr));return;*/  
  85.              if(tag =='checkboxs'/*复选组  多个字段 */  
  86.              {  
  87.                 plugin = p0;  
  88.                 plugin = plugin.replace('|-','');  
  89.                 plugin = plugin.replace('-|','');  
  90.                 var name = 'checkboxs_'+checkboxs;  
  91.                 attr_arr_all['parse_name'] = name;  
  92.                 attr_arr_all['name'] = '';  
  93.                 attr_arr_all['value'] = '';  
  94.                   
  95.                 attr_arr_all['content'] = '<span leipiplugins="checkboxs"  title="'+attr_arr_all['title']+'">';  
  96.                 var dot_name ='', dot_value = '';  
  97.                 p5.replace(preg_group, function(parse_group) {  
  98.                     var is_new=false,option = new Object();  
  99.                     parse_group.replace(preg_attr, function(str0,k,val) {  
  100.                         if(k=='name')  
  101.                         {  
  102.                             if(val=='leipiNewField')  
  103.                             {  
  104.                                 is_new=true;  
  105.                                 fields++;  
  106.                                 val = 'data_'+fields;  
  107.                             }  
  108.   
  109.   
  110.                             attr_arr_all['name'] += dot_name + val;  
  111.                             dot_name = ',';  
  112.   
  113.   
  114.                         }  
  115.                         else if(k=='value')  
  116.                         {  
  117.                             attr_arr_all['value'] += dot_value + val;  
  118.                             dot_value = ',';  
  119.   
  120.   
  121.                         }  
  122.                         option[k] = val;      
  123.                     });  
  124.                       
  125.                     if(!attr_arr_all['options']) attr_arr_all['options'] = new Array();  
  126.                     attr_arr_all['options'].push(option);  
  127.                     //if(!option['checked']) option['checked'] = '';  
  128.                     var checked = option['checked'] !=undefined ? 'checked="checked"' : '';  
  129.                     attr_arr_all['content'] +='<input type="checkbox" name="'+option['name']+'" value="'+option['value']+'"  '+checked+'/>'+option['value']+' ';  
  130.   
  131.   
  132.                     if(is_new)  
  133.                     {  
  134.                         var arr = new Object();  
  135.                         arr['name'] = option['name'];  
  136.                         arr['leipiplugins'] = attr_arr_all['leipiplugins'];  
  137.                         add_fields[option['name']] = arr;  
  138.                     }  
  139.                 });  
  140.                 attr_arr_all['content'] += '</span>';  
  141.   
  142.   
  143.                 //parse  
  144.                 template = template.replace(plugin,attr_arr_all['content']);  
  145.                 template_parse = template_parse.replace(plugin,'{'+name+'}');  
  146.                 template_parse = template_parse.replace('{|-','');  
  147.                 template_parse = template_parse.replace('-|}','');  
  148.                 template_data[pno] = attr_arr_all;  
  149.                 checkboxs++;  
  150.   
  151.   
  152.              }else if(name)  
  153.             {  
  154.                 if(tag =='radios'/*单选组  一个字段*/  
  155.                 {  
  156.                     plugin = p0;  
  157.                     plugin = plugin.replace('|-','');  
  158.                     plugin = plugin.replace('-|','');  
  159.                     attr_arr_all['value'] = '';  
  160.                     attr_arr_all['content'] = '<span leipiplugins="radios" name="'+attr_arr_all['name']+'" title="'+attr_arr_all['title']+'">';  
  161.                     var dot='';  
  162.                     p5.replace(preg_group, function(parse_group) {  
  163.                         var option = new Object();  
  164.                         parse_group.replace(preg_attr, function(str0,k,val) {  
  165.                             if(k=='value')  
  166.                             {  
  167.                                 attr_arr_all['value'] += dot + val;  
  168.                                 dot = ',';  
  169.                             }  
  170.                             option[k] = val;      
  171.                         });  
  172.                         option['name'] = attr_arr_all['name'];  
  173.                         if(!attr_arr_all['options']) attr_arr_all['options'] = new Array();  
  174.                         attr_arr_all['options'].push(option);  
  175.                         //if(!option['checked']) option['checked'] = '';  
  176.                         var checked = option['checked'] !=undefined ? 'checked="checked"' : '';  
  177.                         attr_arr_all['content'] +='<input type="radio" name="'+attr_arr_all['name']+'" value="'+option['value']+'"  '+checked+'/>'+option['value']+' ';  
  178.   
  179.   
  180.                     });  
  181.                     attr_arr_all['content'] += '</span>';  
  182.   
  183.   
  184.                 }else  
  185.                 {  
  186.                     attr_arr_all['content'] = is_new ? plugin.replace(/leipiNewField/,name) : plugin;  
  187.                 }  
  188.                 template = template.replace(plugin,attr_arr_all['content']);  
  189.                 template_parse = template_parse.replace(plugin,'{'+name+'}');  
  190.                 template_parse = template_parse.replace('{|-','');  
  191.                 template_parse = template_parse.replace('-|}','');  
  192.                 if(is_new)  
  193.                 {  
  194.                     var arr = new Object();  
  195.                     arr['name'] = name;  
  196.                     arr['leipiplugins'] = attr_arr_all['leipiplugins'];  
  197.                     add_fields[arr['name']] = arr;  
  198.                 }  
  199.                 template_data[pno] = attr_arr_all;     
  200.             }  
  201.             pno++;  
  202.         })  
  203.         var parse_form = new Object({  
  204.             'fields':fields,//总字段数  
  205.             'template':template,//完整html  
  206.             'parse':template_parse,//控件替换为{data_1}的html  
  207.             'data':template_data,//控件属性  
  208.             'add_fields':add_fields//新增控件  
  209.         });  
  210.         return JSON.stringify(parse_form);  
  211.     },  
  212.     /*type  =  save 保存设计 versions 保存版本  close关闭 */  
  213.     fnCheckForm : function ( type ) {  
  214.         var formType=document.getElementById("formType").value;  
  215.         if(leipiEditor.queryCommandState( 'source' ))  
  216.             leipiEditor.execCommand('source');//切换到编辑模式才提交,否则有bug     
  217.         if(leipiEditor.hasContents()){  
  218.             leipiEditor.sync();/*同步内容*/  
  219.             //--------------以下仅参考-----------------------------------------------------------------------------------------------------  
  220.             var type_value='',formid=0,fields=$("#fields").val(),formeditor='';  
  221.   
  222.   
  223.             iftypeof type!=='undefined' ){  
  224.                 type_value = type;  
  225.             }  
  226.             console.log(document.getElementById("formType"));  
  227.             //获取表单设计器里的内容  
  228.             formeditor=leipiEditor.getContent();  
  229.             //解析表单设计器控件  
  230.             var parse_form = this.parse_form(formeditor,fields);  
  231.              //异步提交数据  
  232.              $.ajax({  
  233.                 type: 'POST',  
  234.                 url : '/webFormTest/addForm.do',  
  235.                 dataType : 'html',  
  236.                 async:false,  
  237.                 //contentType: 'application/json;charset=utf-8',  
  238.                 data : {'type' : type_value,'formid':formid,'parse_form':parse_form,"formType":formType},        
  239.                 success : function(data){  
  240.                     alert("保存成功");  
  241.                     window.location.href ="./my_views/formList.html";  
  242.                 }  
  243.             });  
  244.               
  245.         } else {  
  246.             alert('表单内容不能为空!')  
  247.             $('#submitbtn').button('reset');  
  248.             return false;  
  249.         }  
  250.     } ,  
  251.     /*预览表单*/  
  252.     fnReview : function (){  
  253.         if(leipiEditor.queryCommandState( 'source' ))  
  254.             leipiEditor.execCommand('source');/*切换到编辑模式才提交,否则部分浏览器有bug*/  
  255.         if(leipiEditor.hasContents()){  
  256.             leipiEditor.sync();       /*同步内容*/  
  257.             //--------------以下仅参考-------------------------------------------------------------------  
  258.             /*设计form的target 然后提交至一个新的窗口进行预览*/  
  259.             var type_value='',formid=0,fields=$("#fields").val(),formeditor='';  
  260.             var formType=document.getElementById("formType").value;  
  261.             iftypeof type!=='undefined' ){  
  262.                 type_value = type;  
  263.             }  
  264.             //获取表单设计器里的内容  
  265.             formeditor=leipiEditor.getContent();  
  266.             //解析表单设计器控件  
  267.             var parse_form = this.parse_form(formeditor,fields);  
  268.             var forms=JSON.parse(parse_form);  
  269.             console.log(forms);  
  270.             console.log(typeof forms);  
  271.             console.log(forms.template);  
  272.             var forms1=forms.template;  
  273.                 win_parse=window.open('','','width=800,height=400,alwaysRaised=yes,top=100,left=200');  
  274.                 //win_parse=window.open('','mywin',"menubar=0,toolbar=0,status=0,resizable=1,left=0,top=0,scrollbars=1,width=" +(screen.availWidth-10) + ",height=" + (screen.availHeight-50) + "\"");  
  275.                 var str='<div style="width:500px;height:300px;border:1px solid grey">'+forms1+'</div>';  
  276.                 win_parse.document.write(forms1);  
  277.                 win_parse.focus();       
  278.         } else {  
  279.             alert('表单内容不能为空!');  
  280.             return false;  
  281.         }  
  282.     }  
  283. };  

那么这里需要着重说明的就是js文件,在原文件中大家可以看到js也是写在html中的,最重要的是到了保存和预览的时候,都变了请用户自已处理:
alert("你点击了保存,这里可以异步提交,请自行处理....");
alert("你点击了预览,请自行处理....");

于是我在对插件封装的数据进行了一定分析后就自行解决了这两个问题,也就是主要修改的地方。


二、前台表单创建、预览完毕,要能实现以后都随时调用的功能,自然就需要存储到数据库中,前台似乎也能直接操作数据库,但是我本身是做后台的,因此就直接用了后台和数据库交互。

后太也分别创建了model实体类、控制层controller、接口service、接口实现类serviceImp。因为这次主要是实现前台功能,我就把重心放在了前台,所以后台没有dao层。
原本我是连service都不准备建立的,只是后来为了测试方便,还是建立了,因此各层看起来其实很混乱,该写在service的代码写在了controller,依次类推。
代码分别如下:


(1)、controller层,对前台传入的字符串进行了一定处理:
[java]  view plain  copy
 
  1. package formControllers;  
  2. import java.util.Map;  
  3. import javax.servlet.http.HttpServletRequest;  
  4. import org.springframework.beans.factory.annotation.Autowired;  
  5. import org.springframework.stereotype.Controller;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RequestMethod;  
  8. import org.springframework.web.bind.annotation.ResponseBody;  
  9. import services.FormService;  
  10.   
  11.   
  12. @Controller  
  13. public class FormController {  
  14.     @Autowired  
  15.     FormService formService;  
  16.   
  17.   
  18.     @RequestMapping(value = "/addForm.do", method = RequestMethod.POST)  
  19.     @ResponseBody  
  20.     public Object addForm(HttpServletRequest request) {  
  21.         // String type_value = request.getParameter("type_value");  
  22.         // String formid = request.getParameter("formid");  
  23.         String parse_form = request.getParameter("parse_form");  
  24.         String formType = request.getParameter("formType");  
  25.         System.out.println(formType);  
  26.         int index1 = parse_form.indexOf("\"template\":");  
  27.         int index2 = parse_form.indexOf("\"parse\":");  
  28.         String string = parse_form.substring(index1 + 12, index2 - 6);  
  29.         string = string.replace("\\", "");  
  30.         string = string.replace("{""");  
  31.         string = string.replace("}""");  
  32.         string = string.replace("|""");  
  33.         string = string.replace("-""");  
  34.         formService.addForm(formType, string);  
  35.         return string;  
  36.     }  
  37. }  


(2)、service层存入数据库:


[java]  view plain  copy
 
  1. Service:  
  2. package services;  
  3. import java.util.Map;  
  4.   
  5.   
  6. public interface FormService {  
  7.     public Object addForm(String formType, String string);  
  8. }  


serviceImp代码:

[java]  view plain  copy
 
  1. package servicesImp;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.Statement;  
  7. import java.util.ArrayList;  
  8. import java.util.Date;  
  9. import java.util.HashMap;  
  10. import java.util.Map;  
  11. import org.springframework.stereotype.Service;  
  12. import services.FormService;  
  13. @Service("FormService")  
  14. public class FormServiceImp implements FormService {  
  15.   
  16.   
  17.     /** 
  18.      * 新增表单 
  19.      *  
  20.      * @author:tuzongxun 
  21.      * @Title: addForm 
  22.      * @Description: TODO 
  23.      * @param @param formType 
  24.      * @param @param string 
  25.      * @param @return 
  26.      * @date Mar 28, 2016 4:30:18 PM 
  27.      * @throws 
  28.      */  
  29.     public Object addForm(String formType, String string) {  
  30.         System.out.println(string);  
  31.         try {  
  32.             Connection connection = this.getDb();  
  33.             PreparedStatement ps = connection  
  34.                     .prepareStatement("insert into  formtest(formId,formType,form) values(?,?,?)");  
  35.             String formId = new Date().getTime() + "";  
  36.             ps.setString(1, formId);  
  37.             ps.setString(2, formType);  
  38.             ps.setString(3, string);  
  39.             ps.executeUpdate();  
  40.             connection.close();  
  41.         } catch (Exception e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.         return string;  
  45.     }  
  46.   
  47.   
  48.     public Connection getDb() {  
  49.         Connection connection = null;  
  50.         try {  
  51.             Class.forName("com.mysql.jdbc.Driver");  
  52.             connection = DriverManager.getConnection(  
  53.                     "jdbc:mysql://localhost:3306/formtest""root""123456");  
  54.         } catch (Exception e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.         return connection;  
  58.     }  
[java]  view plain  copy
 
  1. /**链接数据库*/<p align="left"><strong><span style="color:#7F0055;">public</span></strong> Connection getDb() {</p><p align="left">       Connection <span style="color:#6A3E3E;">connection</span> = <strong><span style="color:#7F0055;">null</span></strong>;</p><p align="left">       <strong><span style="color:#7F0055;">try</span></strong> {</p><p align="left">           Class.<em>forName</em>(<span style="color:#2A00FF;">"com.mysql.jdbc.Driver"</span>);</p><p align="left">           <span style="color:#6A3E3E;">connection</span> = DriverManager.<em>getConnection</em>(</p><p align="left">                  <span style="color:#2A00FF;">"jdbc:mysql://localhost:3306/formtest"</span>, <span style="color:#2A00FF;">"root"</span>, <span style="color:#2A00FF;">"123456"</span>);</p><p align="left">       } <strong><span style="color:#7F0055;">catch</span></strong> (Exception <span style="color:#6A3E3E;">e</span>) {</p><p align="left">           <span style="color:#6A3E3E;">e</span>.printStackTrace();</p><p align="left">       }</p><p align="left">       <strong><span style="color:#7F0055;">return</span></strong> <span style="color:#6A3E3E;">connection</span>;</p><p align="left">    }</p><p align="left"> }</p>  



Model实体:

[java]  view plain  copy
 
  1. package models;  
  2. public class FormModel {  
  3.     // 'type' : type_value,'formid':formid,'parse_form':parse_form  
  4.     private String formId;  
  5.     private String type;  
  6.     private Integer formid;  
  7.     private String parse_form;  
  8.     private String formType;  
  9.   
  10.   
  11.     public String getType() {  
  12.         return type;  
  13.     }  
  14.   
  15.   
  16.     public void setType(String type) {  
  17.         this.type = type;  
  18.     }  
  19.   
  20.   
  21.     public int getFormid() {  
  22.         return formid;  
  23.     }  
  24.   
  25.   
  26.     public String getParse_form() {  
  27.         return parse_form;  
  28.     }  
  29.   
  30.   
  31.     public void setFormid(Integer formid) {  
  32.         this.formid = formid;  
  33.     }  
  34.   
  35.   
  36.     public void setParse_form(String parse_form) {  
  37.         this.parse_form = parse_form;  
  38.     }  
  39.   
  40.   
  41.     public String getFormType() {  
  42.         return formType;  
  43.     }  
  44.   
  45.   
  46.     public void setFormType(String formType) {  
  47.         this.formType = formType;  
  48.     }  
  49.   
  50.   
  51.     public String getFormId() {  
  52.         return formId;  
  53.     }  
  54.   
  55.   
  56.     public void setFormId(String formId) {  
  57.         this.formId = formId;  
  58.     }  
  59.   
  60.   
  61.     @Override  
  62.     public String toString() {  
  63.         return "FormModel [formId=" + formId + ", type=" + type + ", formid="  
  64.                 + formid + ", parse_form=" + parse_form + ", formType="  
  65.                 + formType + "]";  
  66.     }  
  67.   
  68.   
  69. }  

页面效果如图:




原文index.html文件代码:

[html]  view plain  copy
 
  1. <!DOCTYPE HTML>  
  2. <html>  
  3.  <head>  
  4.       
  5.     <title>WEB表单设计器 Ueditor Formdesign Plugins -leipi.org</title>  
  6.         <meta name="keyword" content="ueditor Formdesign plugins,formdesigner,ueditor扩展,web表单设计器,高级表单设计器,Leipi Form Design,web form设计器,web form designer,javascript jquery ueditor php表单设计器,formbuilder">  
  7.         <meta name="description" content="Ueditor Web Formdesign Plugins 扩展即WEB表单设计器扩展,它通常在、OA系统、问卷调查系统、考试系统、等领域发挥着重要作用,你可以在此基础上任意修改使功能无限强大!">  
  8.   
  9.   
  10.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  11.     <meta name="viewport" content="width=device-width, initial-scale=1.0">  
  12.     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
  13.     <meta name="author" content="leipi.org">  
  14.     <link href="css/bootstrap/css/bootstrap.css?2023" rel="stylesheet" type="text/css" />  
  15.     <!--[if lte IE 6]>  
  16.     <link rel="stylesheet" type="text/css" href="css/bootstrap/css/bootstrap-ie6.css?2023">  
  17.     <![endif]-->  
  18.     <!--[if lte IE 7]>  
  19.     <link rel="stylesheet" type="text/css" href="css/bootstrap/css/ie.css?2023">  
  20.     <![endif]-->  
  21.     <link href="css/site.css?2023" rel="stylesheet" type="text/css" />  
  22.     <script type="text/javascript">  
  23.         var _root='http://form/index.php?s=/',_controller = 'index';  
  24.     </script>  
  25.       
  26. <!--style>  
  27.     .list-group-item{padding:0px;}  
  28. </style-->  
  29.   
  30.   
  31.  </head>  
  32. <body>  
  33.   
  34.   
  35. <!-- fixed navbar -->  
  36. <div class="navbar navbar-inverse navbar-fixed-top">  
  37.   <div class="navbar-inner">  
  38.     <div class="container">  
  39.       <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">  
  40.         <span class="icon-bar"></span>  
  41.         <span class="icon-bar"></span>  
  42.         <span class="icon-bar"></span>  
  43.       </button>  
  44.       <a class="brand" href="http://www.leipi.org" target="_blank">雷劈网</a>  
  45.       <div class="nav-collapse collapse">  
  46.         <ul class="nav">  
  47.             <li class="active"><a href="/">表单设计器</a></li>  
  48.             <li ><a href="http://formdesign.leipi.org/doc.html">文档</a></li>  
  49.             <li ><a href="http://formdesign.leipi.org/demo.html">实例</a></li>  
  50.             <li ><a href="http://formdesign.leipi.org/downloads.html">下载</a></li>  
  51.             <li ><a href="http://formdesign.leipi.org/feedback.html">公开讨论</a></li>  
  52.         </ul>  
  53.       </div>  
  54.     </div>  
  55.   </div>  
  56. </div>  
  57.   
  58.   
  59.   
  60.   
  61.       
  62.   
  63.   
  64.   
  65.   
  66. <!-- Docs page layout -->  
  67. <div class="bs-header" id="content">  
  68.   <div class="container">  
  69.   
  70.   
  71.     <h1><img src="js/ueditor/formdesign/images/leipi_formdesign.png" width="64"/>WEB表单设计器 <small>Ueditor1.4.2 + Formdesign4.1.x</small></h1>  
  72.     <p>  
  73.         感谢大家使用,如有任何意见或建议,请务必告知,<a href="#bs-footer">免责声明</a>。  
  74.         <p>  
  75.         复制分享:<input type="text" value="大家都在用雷劈网WEB表单设计器,你去官网看看 http://formdesign.leipi.org/" style="width:80%" onclick="this.select()"/>  
  76.         </p>  
  77.         交流Q群: 143263697  
  78.     </p>  
  79.       
  80.   </div>  
  81. </div>  
  82.   
  83.   
  84.   
  85.   
  86. <div class="container">  
  87. <form method="post" id="saveform" name="saveform" action="/index.php?s=/index/parse.html">  
  88. <input type="hidden" name="fields" id="fields" value="0">  
  89. <div class="row">  
  90.   
  91.   
  92.     <div class="well well-small">  
  93. <span class="pull-right">  
  94.     <a href="http://formdesign.leipi.org/demo.html" class="btn btn-success btn-small">使用实例演示</a>  
  95. </span>  
  96.   
  97.   
  98. <p>  
  99.  一栏布局:<br /><br />  
  100.         <button type="button" onclick="leipiFormDesign.exec('text');" class="btn btn-info">文本框</button>  
  101.         <button type="button" onclick="leipiFormDesign.exec('textarea');" class="btn btn-info">多行文本</button>  
  102.         <button type="button" onclick="leipiFormDesign.exec('select');" class="btn btn-info">下拉菜单</button>  
  103.         <button type="button" onclick="leipiFormDesign.exec('radios');" class="btn btn-info">单选框</button>  
  104.         <button type="button" onclick="leipiFormDesign.exec('checkboxs');" class="btn btn-info">复选框</button>  
  105.         <button type="button" onclick="leipiFormDesign.exec('macros');" class="btn btn-info">宏控件</button>  
  106.         <button type="button" onclick="leipiFormDesign.exec('progressbar');" class="btn btn-info">进度条</button>  
  107.         <button type="button" onclick="leipiFormDesign.exec('qrcode');" class="btn btn-info">二维码</button>  
  108.         <button type="button" onclick="leipiFormDesign.exec('listctrl');" class="btn btn-info">列表控件</button>  
  109.         <button type="button" onclick="leipiFormDesign.exec('more');" class="btn btn-primary">一起参与...</button>  
  110. </p>  
  111.      </div>  
  112.        
  113. </div>  
  114.   
  115.   
  116.   
  117.   
  118. <div class="alert">  
  119.     <button type="button" class="close" data-dismiss="alert">×</button>  
  120.     <strong>提醒:</strong>单选框和复选框,如:<code>{|-</code>选项<code>-|}</code>两边边界是防止误删除控件,程序会把它们替换为空,请不要手动删除!  
  121. </div>  
  122.   
  123.   
  124.   
  125.   
  126. <div class="row">  
  127.   
  128.   
  129. <div class="span2">  
  130. <ul class="nav nav-list">  
  131.     <li class="nav-header">两栏布局</li>  
  132.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('text');" class="btn btn-link">文本框</a></li>  
  133.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('textarea');" class="btn btn-link">多行文本</a></li>  
  134.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('select');" class="btn btn-link">下拉菜单</a></li>  
  135.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('radios');" class="btn btn-link">单选框</a></li>  
  136.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('checkboxs');" class="btn btn-link">复选框</a></li>  
  137.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('macros');" class="btn btn-link">宏控件</a></li>  
  138.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('progressbar');" class="btn btn-link">进度条</a></li>  
  139.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('qrcode');" class="btn btn-link">二维码</a></li>  
  140.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('listctrl');" class="btn btn-link">列表控件</a></li>  
  141.     <li><a href="javascript:void(0);" onclick="leipiFormDesign.exec('more');" class="btn btn-link">一起参与...</a></li>  
  142.       
  143. </ul>  
  144.   
  145.   
  146. </div>  
  147.   
  148.   
  149. <div class="span10">  
  150.   
  151.   
  152. <script id="myFormDesign" type="text/plain" style="width:100%;">  
  153. <p style="text-align: center;">  
  154.     <br/>  
  155. </p>  
  156. <p style="text-align: center;">  
  157.     <span style="font-size: 24px;">示例表</span>  
  158. </p>  
  159. <table class="table table-bordered">  
  160.     <tbody>  
  161.         <tr class="firstRow">  
  162.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);">  
  163.                 文本框  
  164.             </td>  
  165.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="227">  
  166.                 <input style="text-align: left; width: 150px;" title="文本框" value="雷劈网" name="leipiNewField" orgheight="" orgwidth="150" orgalign="left" orgfontsize="" orghide="0" leipiplugins="text" orgtype="text"/>  
  167.             </td>  
  168.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="85">  
  169.                 下拉菜单  
  170.             </td>  
  171.             <td valign="top" style="border-color: rgb(221, 221, 221);" width="312">  
  172.                 {|-<span leipiplugins="select"><select name="leipiNewField" title="下拉菜单" leipiplugins="select" size="1" orgwidth="150" style="width: 150px;"><option value="下拉">  
  173.                     下拉  
  174.                 </option>  
  175.                 <option value="菜单">  
  176.                     菜单  
  177.                 </option></select>  </span>-|}  
  178.             </td>  
  179.         </tr>  
  180.         <tr>  
  181.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);">  
  182.                 单选  
  183.             </td>  
  184.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="41">  
  185. {|-<span leipiplugins="radios"  title="单选" name="leipiNewField">  
  186.     <input  value="单选1"   type="radio" checked="checked"/>单选1   
  187.     <input  value="单选2"  type="radio"/>单选2   
  188. </span>-|}  
  189.             </td>  
  190.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="85">  
  191.                 复选  
  192.             </td>  
  193.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="312">  
  194.                 {|-<span leipiplugins="checkboxs" title="复选">  
  195.                     <input name="leipiNewField" value="复选1"  type="checkbox" checked="checked"/>复选1   
  196.                     <input name="leipiNewField" value="复选2"  type="checkbox" checked="checked"/>复选2   
  197.                     <input name="leipiNewField" value="复选3"  type="checkbox"/>复选3   
  198.                     </span>-|}  
  199.             </td>  
  200.         </tr>  
  201.         <tr>  
  202.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);">  
  203.                 宏控件  
  204.             </td>  
  205.             <td valign="top" style="border-color: rgb(221, 221, 221);" width="41">  
  206.                 <input name="leipiNewField" type="text" value="{macros}" title="宏控件" leipiplugins="macros" orgtype="sys_date_cn" orghide="0" orgfontsize="12" orgwidth="150" style="font-size: 12px; width: 150px;"/>  
  207.             </td>  
  208.             <td valign="top" style="word-break: break-all; border-color: rgb(221, 221, 221);" width="85">  
  209.                 二维码  
  210.             </td>  
  211.             <td valign="top" style="border-color: rgb(221, 221, 221);" width="312">  
  212.                 <img name="leipiNewField" title="雷劈网" value="http://www.leipi.org" orgtype="url" leipiplugins="qrcode" src="js/ueditor/formdesign/images/qrcode.gif" orgwidth="40" orgheight="40" style="width: 40px; height: 40px;"/>  
  213.             </td>  
  214.         </tr>  
  215.     </tbody>  
  216. </table>  
  217. <p>  
  218.     <input name="leipiNewField" leipiplugins="listctrl" type="text" value="{列表控件}" readonly="readonly" title="采购商品列表" orgtitle="商品名称`数量`单价`小计`描述`" orgcoltype="text`int`int`int`text`" orgunit="```元``" orgsum="0`0`0`1`0`" orgcolvalue="`````" orgwidth="100%" style="width: 100%;"/>  
  219. </p>  
  220. <p>  
  221.     <textarea title="多行文本" name="leipiNewField" leipiplugins="textarea" value="" orgrich="0" orgfontsize="12" orgwidth="600" orgheight="80" style="font-size:12px;width:600px;height:80px;"></textarea>  
  222. </p>  
  223. <p>  
  224.     <img name="leipiNewField" title="进度条" leipiplugins="progressbar" orgvalue="20" orgsigntype="progress-info" src="js/ueditor/formdesign/images/progressbar.gif"/>  
  225. </p>  
  226. </script>  
  227. </div>  
  228.   
  229.   
  230.   
  231.   
  232.   
  233.   
  234. </div><!--end row-->  
  235.   
  236.   
  237. </form>  
  238.   
  239.   
  240.   
  241.   
  242.   
  243.   
  244. </div><!--end container-->  
  245.   
  246.   
  247.   
  248.   
  249.    
  250.   
  251.   
  252.       
  253.  <div class="bs-footer" role="contentinfo" id="bs-footer">  
  254.       <div class="container">  
  255.           <p><span class="glyphicon glyphicon-list-alt"></span> 免责声明:本站仅分享开发思路和示例代码并且乐于交流和促进网络良性发展,是非商业工具,如有疑问请加群或邮件告知,积极配合调整。</p>  
  256.           <p><span class="glyphicon glyphicon-list-alt"></span> 反馈:[email protected]</p>  
  257.           <p><span class="glyphicon glyphicon-usd"></span> 支持:捐赠支付宝 [email protected] 、<a href="#">捐赠记录</a></p>  
  258.           <p><span class="glyphicon glyphicon-bookmark"></span> 鸣谢:<a href="http://ueditor.baidu.com" target="_balnk">UEditor</a><a href="https://github.com/twbs/bootstrap/" target="_balnk">Bootstrap</a><a href="http://www.leipi.org" target="_balnk">雷劈网</a></p>  
  259.           <p><a href="http://www.leipi.org" title="雷劈网"><img src="http://www.leipi.org/wp-content/themes/leipi/images/leipi.png" alt="雷劈认证 icon" height="30"></a> &copy;2014 Ueditor Formdesign Plugins v4 leipi.org <a href="http://www.miitbeian.gov.cn/" target="_blank">粤ICP备13051130号</a></p>  
  260.       </div>  
  261. </div>  
  262.       
  263.   
  264.   
  265. <script type="text/javascript" charset="utf-8" src="js/jquery-1.7.2.min.js?2023"></script>  
  266.   
  267.   
  268. <script type="text/javascript" charset="utf-8" src="js/ueditor/ueditor.config.js?2023"></script>  
  269. <script type="text/javascript" charset="utf-8" src="js/ueditor/ueditor.all.js?2023"> </script>  
  270. <script type="text/javascript" charset="utf-8" src="js/ueditor/lang/zh-cn/zh-cn.js?2023"></script>  
  271. <script type="text/javascript" charset="utf-8" src="js/ueditor/formdesign/leipi.formdesign.v4.js?2023"></script>  
  272. <!-- script start-->    
  273. <script type="text/javascript">  
  274. var leipiEditor = UE.getEditor('myFormDesign',{  
  275.             //allowDivTransToP: false,//阻止转换div 为p  
  276.             toolleipi:true,//是否显示,设计器的 toolbars  
  277.             textarea: 'design_content',     
  278.             //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个  
  279.            toolbars:[[  
  280.             'fullscreen', 'source', '|', 'undo', 'redo', '|','bold', 'italic', 'underline', 'fontborder', 'strikethrough',  'removeformat', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist','|', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|',  'link', 'unlink',  '|',  'horizontal',  'spechars',  'wordimage', '|', 'inserttable', 'deletetable',  'mergecells',  'splittocells']],  
  281.             //focus时自动清空初始化时的内容  
  282.             //autoClearinitialContent:true,  
  283.             //关闭字数统计  
  284.             wordCount:false,  
  285.             //关闭elementPath  
  286.             elementPathEnabled:false,  
  287.             //默认的编辑区域高度  
  288.             initialFrameHeight:300  
  289.             //,iframeCssUrl:"css/bootstrap/css/bootstrap.css" //引入自身 css使编辑器兼容你网站css  
  290.             //更多其他参数,请参考ueditor.config.js中的配置项  
  291.         });  
  292.   
  293.   
  294.  var leipiFormDesign = {  
  295.     /*执行控件*/  
  296.     exec : function (method) {  
  297.         leipiEditor.execCommand(method);  
  298.     },  
  299.     /*  
  300.         Javascript 解析表单  
  301.         template 表单设计器里的Html内容  
  302.         fields 字段总数  
  303.     */  
  304.    parse_form:function(template,fields)  
  305.     {  
  306.         //正则  radios|checkboxs|select 匹配的边界 |--|  因为当使用 {} 时js报错  
  307.         var preg =  /(\|-<span(((?!<span).)*leipiplugins=\"(radios|checkboxs|select)\".*?)>(.*?)<\/span>-\||<(img|input|textarea|select).*?(<\/select>|<\/textarea>|\/>))/gi,preg_attr =/(\w+)=\"(.?|.+?)\"/gi,preg_group =/<input.*?\/>/gi;  
  308.         if(!fields) fields = 0;  
  309.   
  310.   
  311.         var template_parse = template,template_data = new Array(),add_fields=new Object(),checkboxs=0;  
  312.   
  313.   
  314.         var pno = 0;  
  315.         template.replace(preg, function(plugin,p1,p2,p3,p4,p5,p6){  
  316.             var parse_attr = new Array(),attr_arr_all = new Object(),name = ''select_dot = '' , is_new=false;  
  317.             var p0 = plugin;  
  318.             var tag = p6 ? p6 : p4;  
  319.             //alert(tag + " \n- t1 - "+p1 +" \n-2- " +p2+" \n-3- " +p3+" \n-4- " +p4+" \n-5- " +p5+" \n-6- " +p6);  
  320.   
  321.   
  322.             if(tag == 'radios' || tag == 'checkboxs')  
  323.             {  
  324.                 plugin = p2;  
  325.             }else if(tag == 'select')  
  326.             {  
  327.                 plugin = plugin.replace('|-','');  
  328.                 plugin = plugin.replace('-|','');  
  329.             }  
  330.             plugin.replace(preg_attr, function(str0,attr,val) {  
  331.                     if(attr=='name')  
  332.                     {  
  333.                         if(val=='leipiNewField')  
  334.                         {  
  335.                             is_new=true;  
  336.                             fields++;  
  337.                             val = 'data_'+fields;  
  338.                         }  
  339.                         name = val;  
  340.                     }  
  341.                       
  342.                     if(tag=='select' && attr=='value')  
  343.                     {  
  344.                         if(!attr_arr_all[attr]) attr_arr_all[attr] = '';  
  345.                         attr_arr_all[attr] += select_dot + val;  
  346.                         select_dot = ',';  
  347.                     }else  
  348.                     {  
  349.                         attr_arr_all[attr] = val;  
  350.                     }  
  351.                     var oField = new Object();  
  352.                     oField[attr] = val;  
  353.                     parse_attr.push(oField);  
  354.             })   
  355.             /*alert(JSON.stringify(parse_attr));return;*/  
  356.              if(tag =='checkboxs') /*复选组  多个字段 */  
  357.              {  
  358.                 plugin = p0;  
  359.                 plugin = plugin.replace('|-','');  
  360.                 plugin = plugin.replace('-|','');  
  361.                 var name = 'checkboxs_'+checkboxs;  
  362.                 attr_arr_all['parse_name'] = name;  
  363.                 attr_arr_all['name'] = '';  
  364.                 attr_arr_all['value'] = '';  
  365.                   
  366.                 attr_arr_all['content'] = '<span leipiplugins="checkboxs"  title="'+attr_arr_all['title']+'">';  
  367.                 var dot_name =''dot_value = '';  
  368.                 p5.replace(preg_group, function(parse_group) {  
  369.                     var is_new=false,option = new Object();  
  370.                     parse_group.replace(preg_attr, function(str0,k,val) {  
  371.                         if(k=='name')  
  372.                         {  
  373.                             if(val=='leipiNewField')  
  374.                             {  
  375.                                 is_new=true;  
  376.                                 fields++;  
  377.                                 val = 'data_'+fields;  
  378.                             }  
  379.   
  380.   
  381.                             attr_arr_all['name'] += dot_name + val;  
  382.                             dot_name = ',';  
  383.   
  384.   
  385.                         }  
  386.                         else if(k=='value')  
  387.                         {  
  388.                             attr_arr_all['value'] += dot_value + val;  
  389.                             dot_value = ',';  
  390.   
  391.   
  392.                         }  
  393.                         option[k] = val;      
  394.                     });  
  395.                       
  396.                     if(!attr_arr_all['options']) attr_arr_all['options'] = new Array();  
  397.                     attr_arr_all['options'].push(option);  
  398.                     //if(!option['checked']) option['checked'] = '';  
  399.                     var checked = option['checked'] !=undefined ? 'checked="checked"' : '';  
  400.                     attr_arr_all['content'] +='<input type="checkbox" name="'+option['name']+'" value="'+option['value']+'"  '+checked+'/>'+option['value']+' ';  
  401.   
  402.   
  403.                     if(is_new)  
  404.                     {  
  405.                         var arr = new Object();  
  406.                         arr['name'] = option['name'];  
  407.                         arr['leipiplugins'] = attr_arr_all['leipiplugins'];  
  408.                         add_fields[option['name']] = arr;  
  409.   
  410.   
  411.                     }  
  412.   
  413.   
  414.                 });  
  415.                 attr_arr_all['content'] += '</span>';  
  416.   
  417.   
  418.                 //parse  
  419.                 template = template.replace(plugin,attr_arr_all['content']);  
  420.                 template_parse = template_parse.replace(plugin,'{'+name+'}');  
  421.                 template_parse = template_parse.replace('{|-','');  
  422.                 template_parse = template_parse.replace('-|}','');  
  423.                 template_data[pno] = attr_arr_all;  
  424.                 checkboxs++;  
  425.   
  426.   
  427.              }else if(name)  
  428.             {  
  429.                 if(tag =='radios') /*单选组  一个字段*/  
  430.                 {  
  431.                     plugin = p0;  
  432.                     plugin = plugin.replace('|-','');  
  433.                     plugin = plugin.replace('-|','');  
  434.                     attr_arr_all['value'] = '';  
  435.                     attr_arr_all['content'] = '<span leipiplugins="radios" name="'+attr_arr_all['name']+'" title="'+attr_arr_all['title']+'">';  
  436.                     var dot='';  
  437.                     p5.replace(preg_group, function(parse_group) {  
  438.                         var option = new Object();  
  439.                         parse_group.replace(preg_attr, function(str0,k,val) {  
  440.                             if(k=='value')  
  441.                             {  
  442.                                 attr_arr_all['value'] += dot + val;  
  443.                                 dot = ',';  
  444.                             }  
  445.                             option[k] = val;      
  446.                         });  
  447.                         option['name'] = attr_arr_all['name'];  
  448.                         if(!attr_arr_all['options']) attr_arr_all['options'] = new Array();  
  449.                         attr_arr_all['options'].push(option);  
  450.                         //if(!option['checked']) option['checked'] = '';  
  451.                         var checked = option['checked'] !=undefined ? 'checked="checked"' : '';  
  452.                         attr_arr_all['content'] +='<input type="radio" name="'+attr_arr_all['name']+'" value="'+option['value']+'"  '+checked+'/>'+option['value']+' ';  
  453.   
  454.   
  455.                     });  
  456.                     attr_arr_all['content'] += '</span>';  
  457.   
  458.   
  459.                 }else  
  460.                 {  
  461.                     attr_arr_all['content'] = is_new ? plugin.replace(/leipiNewField/,name) : plugin;  
  462.                 }  
  463.                 //attr_arr_all['itemid'] = fields;  
  464.                 //attr_arr_all['tag'] = tag;  
  465.                 template = template.replace(plugin,attr_arr_all['content']);  
  466.                 template_parse = template_parse.replace(plugin,'{'+name+'}');  
  467.                 template_parse = 

你可能感兴趣的:(Activiti,流程整合,自定义表单)