之前的那篇博客,当时做完之后,只在我的那个模块没有问题,并且使用的是火狐浏览器进行的测试,项目交到测试组后,客户在使用IE9进行测试的时候出现了问题,这里续前面的博客,做一次修改,请博友们原谅!
做了如下修改:
1.excel表格中多增加了一个字段
2.springmvc-servlet.xml的注解启动器做了新的配置(是因为springmvc在做封装时默认json的mime类型为application/json;IE9在这里是不支持的,所以引进了json-all-2的jar包,引入2.0的jar包是因为项目使用的是spring4)
3.前台的jsp页面做了修改
4.controller做了修改
前台:
主页面:
js函数
//批量导入
//跳转页面
function inputBatch(){
loadingShow();
$.post("${contextPath}/sys/printdepart/preInputBatch",//跳转模态框
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) {
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+"行所在城市代码,填写正确的城市代码请到模版文件市级代码工作表中查找");
loadingHide();
}else if(data.result=="14"){-----新增字段
$.messager.alert("提示信息","所在城市对应的省份为空,请检查第"+data.index+"行所在城市对应的省份");
loadingHide();
}else if(data.result=="15"){------新增字段
$.messager.alert("提示信息","所在城市对应的省份格式不正确,请检查第"+data.index+"行所在城市对应的省份,输入6位数字字符");
loadingHide();
}else if(data.result=="16"){------新增字段
$.messager.alert("提示信息","所在城市对应的省份不存在,请检查第"+data.index+"行所在城市对应的省份,填写正确的所在城市对应的省份代码请到模版文件省级代码工作表中查找");
loadingHide();
}else if(data.result=="17"){
$.messager.alert("提示信息","所在城市在该省份下不存在,请检查第"+data.index+"行所在城市代码");
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 if(data.result == "0"){-------这里不加data.result=="0"不管是成功还是其他提示信息,都会走导入失败,不知为何,所以只能加上
$.messager.alert("提示信息","导入失败!");
loadingHide();
}
}
});
});
return false;
}
后台
代码
//批量导入
@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() == 2 && sheet.getPhysicalNumberOfRows() == 3){//getPhysicalNumberOfRows()指的是返回物理定义的行数//getLastRowNum()指的是返回此sheet中最后一行的数字编号
map.put("result", "2");//表中无数据
return map;
}
Integer row=0;
Integer index=0;
for(int i = 0; i < sheet.getLastRowNum() - 2; i++){// 取到工作表所有行数-2是代表没有数据的行数
PrintDepart print=new PrintDepart();
row=i+4;
index=i+3;
XSSFRow rw=sheet.getRow(index);
if(null == rw){//如果该行数据为空,继续
continue;
}
//检查输入的数据是否合法
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())){
if(null!=printDepartService.getByProerties(new String[]{"departCode","status"}, new Object[]{sheet.getRow(index).getCell(0).getStringCellValue(),"1"})){
map.put("result", "3");//存在机构代码,此处仅查询真是存在的及状态为1的机构
map.put("index", row);
return map;
}
if(Pattern.matches("^\\d{8,}$", sheet.getRow(index).getCell(0).getStringCellValue())==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", "14");//所在城市对应的省份为空
map.put("index", row);
return map;
}
if(Pattern.matches("^\\d{6}$", sheet.getRow(index).getCell(2).getStringCellValue()) == false){
map.put("result", "15");//所在城市对应的省份不合法
map.put("index", row);
return map;
}
List listArea=areaService.queryProvince(sheet.getRow(index).getCell(2).getStringCellValue());
if(listArea.size() == 0){
map.put("result", "16");//所在城市对应的省份代码要填写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", "6");//所在城市为空
map.put("index", row);
return map;
}
if(Pattern.matches("^\\d{6}$", sheet.getRow(index).getCell(3).getStringCellValue())==false){
map.put("result", "12");//所在城市不合法
map.put("index", row);
return map;
}
Area are=areaService.getByProerties(new String[]{"areaCode","areaGrade"},
new Object[]{sheet.getRow(index).getCell(3).getStringCellValue(),"2"});
if(are == null){
map.put("result", "10");//所在城市代码要填写area表中存在的
map.put("index", row);
return map;
}
for(Area entityArea : listArea){
if(!are.getpAreaCode().equals(entityArea.getAreaCode())){
map.put("result", "17");//所在城市不在该省份下
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", "7");//详细地址为空
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", "8");//联系人为空
map.put("index", row);
return map;
}
if(sheet.getRow(index).getCell(6)==null
||"".equals(sheet.getRow(index).getCell(6))||
sheet.getRow(index).getCell(6).getCellType()==XSSFCell.CELL_TYPE_BLANK){
map.put("result", "9");//联系电话为空
map.put("index", row);
return map;
}
if(Pattern.matches("1\\d{10}", sheet.getRow(index).getCell(6).getStringCellValue())==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.setProvince(sheet.getRow(index).getCell(2).getStringCellValue());
print.setCity(sheet.getRow(index).getCell(3).getStringCellValue());
print.setAddress(sheet.getRow(index).getCell(4).getStringCellValue());
print.setLinkMan(sheet.getRow(index).getCell(5).getStringCellValue());
print.setLinkTel(sheet.getRow(index).getCell(6).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;
}
}
以上红色字体标注出来的地方,都是我做过的修改,这是我分别在IE9和火狐下进行过测试,非常抱歉,前面看过我文章的博友,在这里,给大家说一声对不起!
我在编辑时,确实使用的是红色标注,但是保存以后,博客识别不了,我仔细看了,有加就是我加的红色标注
是getLastRowNum()方法,后台代码里面的getLastRowNum() == 2说的是1,2两行合起来是一行,然后3是一行,而物理定义的行还是3行
springmvc.xml
text/html; charset=UTF-8
不考虑IE9兼容:直接