批量导入(后台的springMVC+Spring+Hibernate+前台jQuery+bootstrap+bootstrap-dialog)

在没有采用异步进行表单提交时,批量导入时,要将form标签的enctype的值设置为multipart/form-data,才可以上传,(就是将文件以流的形式上传)。

后台获取数据必须要使用文件工厂(DiskFileItemFactory,ServletFileUpload)。因为通过request.getParameter拿到的值是null,

在项目中,整个项目都采用的是异步方式,因此要引入一个jquery.form.min.js的文件,去做

表单的提交,后台采用的是SpringMVC的文件上传,以下是代码实现:

前台页面是一个bootstrap的一个模态框:

是主页面里面的代码

从页面

这里大家看到会有些蒙,说为什么不把两部分放到一起呢,我来说明,下面的这部分我走了一个后台,然后跳转到的一个页面,然后把这个页面通过js的函数放入的id属性值为printDepartInputBatchForm的那个div里面

下面是js函数

采用$("#inputForm").ajaxSubmit({})来实现,其中#后面的值是form表单的id属性值

//批量导入
		//跳转页面
		function inputBatch(){
			loadingShow();
			$.post("${contextPath}/后台地址",//跳转模态框
			        function(data){
					//alert(data);
			            $("#printDepartInputBatchForm").html(data);
			            loadingHide();
			            $("#modal-input").modal("toggle");
	        });
		}
		//导入
		function inputBatchConfirm(){
			$.messager.model = { 
					ok: {
						text : "确定",
						classed : "btn-default"
					},
					cancel: {
						text : "取消",
						classed : "btn-error"
					}
				}
			$.messager.confirm("提示信息", "确认导入?", function() {
				var excelInput=$('#excelInput').val();
				var templateFileName="print.xlsx";
				if (excelInput== '') {
					$.messager.alert("提示信息","导入文件不能为空!");
					return;
				}
				var suffix=excelInput.substr(excelInput.lastIndexOf(".") + 1);
		        if("xlsx"!= suffix) {    
		        	$.messager.alert("提示信息","导入文件类型必须为excel!");
					return;
		        }
		        if(excelInput!=templateFileName){
		        	$.messager.alert("提示信息","请下载模板文件,进行数据录入!");
					return;
		        }
				loadingShow();
				$('#inputForm').ajaxSubmit({
					type: "post",
					dataType : "json",
					enctype :"multipart/form-data",
					url : "${contextPath}/sys/printdepart/inputBatchPrintDepart",//跳转后台
      				success : function(data) {
      					//返回1时表示导入成功
      					if(data.result=='1'){
      						$.messager.alert("提示信息","导入成功!");
      						loadingHide();
      						$("#modal-input").modal('hide');	      						
      						$("#grid-table").trigger("reloadGrid");
      					}else if(data.result=="2"){
      						$.messager.alert("提示信息","Excel工作表中无数据!");
      						loadingHide();
      					}else if(data.result=="3"){
      						$.messager.alert("提示信息","机构代码已存在,请检查第"+data.index+"行机构代码");
      						loadingHide();
      					}else if(data.result=="4"){
      						$.messager.alert("提示信息","机构代码不能为空,请检查第"+data.index+"行机构代码");
      						loadingHide();
      					}else if(data.result=="5"){
      						$.messager.alert("提示信息","机构名称不能为空,请检查第"+data.index+"行机构名称");
      						loadingHide();
      					}else if(data.result=="11"){
      						$.messager.alert("提示信息","机构代码格式不正确,请检查第"+data.index+"行机构代码,至少输入8位数字字符");
      						loadingHide();
      					}else if(data.result=="6"){
      						$.messager.alert("提示信息","所在城市不能为空,请检查第"+data.index+"行所在城市");
      						loadingHide();
      					}else if(data.result=="12"){
      						$.messager.alert("提示信息","所在城市格式不正确,请检查第"+data.index+"行所在城市,输入6位数字字符");
      						loadingHide();
      					}else if(data.result=="10"){
      						$.messager.alert("提示信息","所在城市代码不存在,请检查第"+data.index+"行所在城市代码,填写正确的城市代码请到模版文件city工作表中查找");
      						loadingHide();
      					}else if(data.result=="7"){
      						$.messager.alert("提示信息","详细地址不能为空,请检查第"+data.index+"行详细地址");
      						loadingHide();
      					}else if(data.result=="8"){
      						$.messager.alert("提示信息","联系人员不能为空,请检查第"+data.index+"行联系人员");
      						loadingHide();
      					}else if(data.result=="9"){
      						$.messager.alert("提示信息","联系电话不能为空,请检查第"+data.index+"行联系电话");
      						loadingHide();
      					}else if(data.result=="13"){
      						$.messager.alert("提示信息","联系电话格式不正确,请检查第"+data.index+"行联系电话,输入正确的联系电话");
      						loadingHide();
      					}else{
      						$.messager.alert("提示信息","导入失败!");
      						loadingHide();
      					}
					}
				});
		 	});
			return false;
		}
js函数里面的代码注释写的还算详细,详细大家都能看的明白。

后台代码:

导入时要引入poi的jar包和文件上传的jar包,SpringMVC的文件上传,(MultipartFile) ,其中的excelInput是前台文件域的name属性的值

//批量导入跳转页面
	@RequestMapping(value="/preInputBatch" ,method={RequestMethod.GET ,RequestMethod.POST})
	public ModelAndView preInputBatch(HttpServletRequest request , HttpServletResponse response) throws Exception{
		logger.info("批量导入页面跳转");
		PrintDepart printDepart=new PrintDepart();
		return new ModelAndView("back/printdepart/inputbatchprintdepart" ,"printDepart" ,printDepart);
	}

//批量导入
    @RequestMapping(value="/inputBatchPrintDepart" ,method={RequestMethod.GET ,RequestMethod.POST})
    @ResponseBody
    public Map inputBatchPrintDepart(MultipartFile excelInput,HttpServletRequest request , HttpServletResponse response) throws Exception{
        logger.info("批量导入");
        Map map=new HashMap();
        List printList=new ArrayList();
        InputStream is=null;
        try {
            is=excelInput.getInputStream();//输入流指向选择的文件
            XSSFWorkbook workBook=new XSSFWorkbook(is);
            XSSFSheet sheet=workBook.getSheetAt(0);
            if(sheet.getLastRowNum()==0){
                map.put("result", "2");//表中无数据
                return map;
            }
            Integer row=0;
            Integer index=0;
            for(int i = 0; i < sheet.getPhysicalNumberOfRows() - 2; i++){//    取到工作表所有行数-2是代表没有数据的行数
                PrintDepart print=new PrintDepart();
                row=i+3;
                index=i+2;
                //检查输入的数据是否合法
                if(sheet.getRow(index).getCell(0)==null
                        ||"".equals(sheet.getRow(index).getCell(0))||
                        sheet.getRow(index).getCell(0).getCellType()==XSSFCell.CELL_TYPE_BLANK){//判断单元格是否为空
                    map.put("result", "4");//机构代码为空
                    map.put("index", row);
                    return map;
                }
                if(null!=printDepartService.getByProerties("departCode",sheet.getRow(index).getCell(0).getStringCellValue())){
                    map.put("result", "3");//存在机构代码
                    map.put("index", row);
                    return map;
                }
                Boolean flag=Pattern.matches("^\\d{8,}$", sheet.getRow(index).getCell(0).getStringCellValue());
                if(flag==false){
                    map.put("result", "11");//机构代码不合法
                    map.put("index", row);
                    return map;
                }
                if(sheet.getRow(index).getCell(1)==null
                        ||"".equals(sheet.getRow(index).getCell(1))||
                        sheet.getRow(index).getCell(1).getCellType()==XSSFCell.CELL_TYPE_BLANK){
                    map.put("result", "5");//机构名称为空
                    map.put("index", row);
                    return map;
                }
                if(sheet.getRow(index).getCell(2)==null
                        ||"".equals(sheet.getRow(index).getCell(2))||
                        sheet.getRow(index).getCell(2).getCellType()==XSSFCell.CELL_TYPE_BLANK){
                    map.put("result", "6");//所在城市为空
                    map.put("index", row);
                    return map;
                }
                Boolean fa=Pattern.matches("^\\d{6}$", sheet.getRow(index).getCell(2).getStringCellValue());
                if(fa==false){
                    map.put("result", "12");//所在城市不合法
                    map.put("index", row);
                    return map;
                }
                if(null==areaService.getByProerties(new String[]{"areaCode","areaGrade"},
                        new Object[]{sheet.getRow(index).getCell(2).getStringCellValue(),"2"})){
                    map.put("result", "10");//所在城市代码要填写area表中存在的
                    map.put("index", row);
                    return map;
                }
                if(sheet.getRow(index).getCell(3)==null
                        ||"".equals(sheet.getRow(index).getCell(3))||
                        sheet.getRow(index).getCell(3).getCellType()==XSSFCell.CELL_TYPE_BLANK){
                    map.put("result", "7");//详细地址为空
                    map.put("index", row);
                    return map;
                }
                if(sheet.getRow(index).getCell(4)==null
                        ||"".equals(sheet.getRow(index).getCell(4))||
                        sheet.getRow(index).getCell(4).getCellType()==XSSFCell.CELL_TYPE_BLANK){
                    map.put("result", "8");//联系人为空
                    map.put("index", row);
                    return map;
                }
                if(sheet.getRow(index).getCell(5)==null
                        ||"".equals(sheet.getRow(index).getCell(5))||
                        sheet.getRow(index).getCell(5).getCellType()==XSSFCell.CELL_TYPE_BLANK){
                    map.put("result", "9");//联系电话为空
                    map.put("index", row);
                    return map;
                }
                Boolean fl=Pattern.matches("1\\d{10}", sheet.getRow(index).getCell(5).getStringCellValue());
                if(fl==false){
                    map.put("result", "13");//联系电话不合法
                    map.put("index", row);
                    return map;
                }
                print.setDepartCode(sheet.getRow(index).getCell(0).getStringCellValue());
                print.setDepartName(sheet.getRow(index).getCell(1).getStringCellValue());
                print.setCity(sheet.getRow(index).getCell(2).getStringCellValue());
                print.setAddress(sheet.getRow(index).getCell(3).getStringCellValue());
                print.setLinkMan(sheet.getRow(index).getCell(4).getStringCellValue());
                print.setLinkTel(sheet.getRow(index).getCell(5).getStringCellValue());
                print.setCreateTime(new Date());
                print.setStatus("1");
                printList.add(print);
            }
            for(PrintDepart entityPrint : printList){//将对象循环添加到数据库
                printDepartService.persist(entityPrint);
            }
            map.put("result", "1");
        } catch (Exception e) {
            e.printStackTrace();
            map.put("result", "0");
        }
        is.close();
        return map;
    }

自认为写的比较详细了,希望可以帮助到大家

你可能感兴趣的:(JavaEE,Spring,SpringMVC)