java maven导入导出_Java +EasyUI+SpringMvc实现Excle导入导出(上)

标签:

前言

先介绍下项目的开发环境,采用java开发语言进行开发,前台UI使用的是EasyUI框架,接下来是SpringMvc与Ejb结合来开发,整个项目管理采用的是Maven管理,服务器用的是Jboss6.2.0企业版。

正文

配置

对于Excel上传文件我们首先要引入commons-fileupload.jar包,由于我们的项目采用Maven进行项目管理,所以对于jar包的引入是在pom.xml文件中添加的依赖,添加commons-fileupload.jar的坐标:

commons-fileupload

commons-fileupload

1.3.1

由于后台代码的ExcelUtil工具类所在的项目不再当前的web项目中,而在itoo-exam-too项目中,因此我们需要将ExcelUtil工具类所在的itoo-exam-too项目进行引入,也就是在maven的pom.xml文件中添加itoo-exam-too的项目依赖:

com.tgb

itoo-exam-tool

0.0.1-SNAPSHOT

接下来SpringMvc的配置文件也需要做些配置,这样可以将前台文件进行解析,传到后台:

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

具体实现

Excel的导入我们可以进行分解,包括三个步骤:

1.上传Excel文件

2.读取Excle文件中的数据,将Excle数据转化成list集合

3.将list集合存入数据库

首先我们开始看我们前台easyui上传Excle文件的代码,采用的是一个form表单,表单里包含一个easyui的上传文件的控件easyui-filebox:

选择文件: 

导入题库

前台代码比较简单,我们使用是EasyUI的filebox进行文件上传,这里需要注意的是form表单的enctype属性必须是""multipart/form-data",接下来我们用js代码对Excle的格式进行基本的校验,然后将文件提交到后台Controller,

 //导入excel

function uploadExcel(){

//得到上传文件的全路径

var fileName= $('#uploadExcel').filebox('getValue');

//获取题型

var id= $('#questionType').combobox('getValue');

var questionTypes=encodeURI(id);

if(questionTypes !=""){

//进行基本校验

if(fileName==""){

$.messager.alert('提示','请选择上传文件!','info');

}else{

//对文件格式进行校验

var d1=/\.[^\.]+$/.exec(fileName);

if(d1==".xls"){

//获取题型

var id= $('#questionType').combobox('getValue')

var questionTypes=encodeURI(id);

//获取课程

var courseTypeId =$('#courseTypeId').combobox('getValue')

var courseType=encodeURI(courseTypeId);

//提交表单

document.getElementById("questionTypesManage").action="${pageContext.request.contextPath}/leadtoQuestionTypes/leadInExcelQuestionBank?questionType="+questionTypes+"&courseType="+courseType;

document.getElementById("questionTypesManage").submit();

$.messager.alert('提示','操作成功!','info');

}else{

$.messager.alert('提示','请选择xls格式文件!','info');

$('#uploadExcel').filebox('setValue','');

}

}

}else{

$.messager.alert('提示','请选择课程题型!','info');

}

}

前台代码完毕以后,我们接下来看controller的代码,这里需要注意的是,前台easyui的filebox的name标签的名字是作为参数传到后台的,后台以流的形式接收到前台传过来的excle文件,我们使用Excle工具类将Excle转换成list集合,最后将list集合保存到数据库中。我们看下后台的代码实现:

/**

* 导入题库Excel

*

* @param uploadExcel 上传的excel文件

*

* @param request 请求

*

* @param resposne 响应

*

* @throws UnsupportedEncodingException 编码异常

*

*/

@RequestMapping("/leadInExcelQuestionBank")

public String leadInExcelQuestionBank(

@RequestParam("uploadExcel") CommonsMultipartFile uploadExcel,

HttpServletRequest request, HttpServletResponse response)

throws UnsupportedEncodingException {

// 获取前台传来的题型和课程

String questionType = request.getParameter("questionType").trim();

String courseType = request.getParameter("courseType").trim();

String questionTypeNameId = new String(

questionType.getBytes("iso-8859-1"), "utf-8");

String courseTypeId = new String(courseType.getBytes("iso-8859-1"),

"utf-8");

InputStream in;

boolean flag = false;

try {

// 获取前台exce的输入流

in = uploadExcel.getInputStream();

//获取sheetName名字

String sheetName = leadToInQuestionTypesManageBean.getSheetName(questionTypeNameId);

// excel的表头与文字对应,获取excel表头

LinkedHashMap map = leadToInQuestionTypesManageBean.getMapLeadInExcelQuestionBank(questionTypeNameId);

//获取组合excle表头数组,防止重复用的

String[] uniqueFields =leadToInQuestionTypesManageBean.getUniqueFields(questionTypeNameId);

//获取需要导入的具体的表

Class class1=leadToInQuestionTypesManageBean.getClassName(questionTypeNameId);

//excel转化成的list集合

List list = null;

try {

//调用excle共用类,转化成list

list=ExcelUtil.excelToList(in, sheetName, class1, map, uniqueFields);

} catch (ExcelException e) {

e.printStackTrace();

}

//保存实体集合

flag= leadToInQuestionTypesManageBean.leadInExcelQuestionBank(questionTypeNameId, courseTypeId, list);

} catch (IOException e1) {

e1.printStackTrace();

}

System.out.println("执行结果:" + flag);

return "/LeadToQuestionTypeBank";

}

到这里关于Excle导入就已经完成了,关于Excle的导出,和ExcelUtil类的编写,我们下篇文章继续,敬请期待。

标签:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看懂云计算、虚拟化和容器,这一篇就够啦!

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君来源 | 鲜枣课堂“云计算”这个词,相信大家都非常熟悉。作为信息科技发展的主流趋势,它频繁地出现在我们的眼前。伴随它一起出现的,还有这些概念名词——OpenStack、Hypervisor、KVM…

一张图读懂阿里巴巴一站式研发协同云——云效

摘要: 程序员、测试员、项目经理,你们有freestyle吗?阿里云云效,一站式企业协同研发云,“需求->开发->测试->发布->运维->运营”端到端的协同服务和研发工具支撑,助力企业快速创新迭代和研发…

flowable实战(十)flowable 启动流程到完成所有任务之间的数据库变化

来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图,很简单的流程,就是两个UserTask: 代码如下: DeploymentBuilder builderrepositoryService.createDeployment(); Deployment deploymentbui…

阿里敏捷教练如何优化优酷需求分析流程?

摘要: 如何帮助优酷迅速融合到阿里研发体系?如何优化优酷的需求分析流程?针对需求信息不明确,开发出来的功能不是产品想要的痛点如何解决? 点此查看原文:http://click.aliyun.com/m/41381/ 导读&#xff1a…

java float 高效加减_java Double 进行加减乘除

Double 工具类package org.fh.util;import java.io.Serializable;import java.math.BigDecimal;import java.math.RoundingMode;/*** double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型* 整型地方法适合于货币…

Gartner预计2019年全球半导体收入将下滑9.6%;苹果中国用户正流向华为;Facebook将支付50亿美元与FTC和解...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

PostgreSQL 多重含义数组检索与条件过滤 (标签1:属性, 标签n:属性) - 包括UPSERT操作如何修改数组、追加数组元素

摘要: 标签 PostgreSQL , 多重函数数组 , UDF索引 , 过滤 , 文本处理 背景 PG的数组类型,被广泛应用于 画像系统 , 标签系统。 在一些业务重建中,对数组内容的定义往往包含了多重含义,例如即包含了标签本身&#xff0c…

flowable实战(十一)flowable 删除数据库表先后顺序

工作流表删除顺序 drop table act_evt_log; drop table act_hi_actinst; drop table act_hi_attachment; drop table act_hi_comment; drop table act_hi_detail; drop table act_hi_identitylink; drop table act_hi_procinst; drop table act_hi_taskinst; drop table act_hi…

从MapReduce的执行来看如何优化MaxCompute(原ODPS) SQL

摘要: SQL基础有这些操作(按照执行顺序来排列): from join(left join, right join, inner join, outer join ,semi join) where group by select sum distinct count order by 如果我们能理解mapreduce是怎么实现这些SQL中的基本操…

mysql getline_getMessage(),getFile,getLine获取异常用法

try {$param $request->all();$param[building_id] 0;$param[sync] 2; // 1小程序2App$param[user_id] $receiveUser->id ?? 0;$follow FollowTool::follow($param);if ($follow[status] ! 200) {empty($follow[msg]) ? $msg "未知错误 follow" : $ms…

flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)

一、ACT_RU_EXECUTION 表(很多初学者迷惑的一张表,以为是流程实例表,其实它叫执行实例表):这个表和act_run_task表,一起控制了用户任务的产生与完成等。 这个表是工作流程的核心表,这个表会体现主干与分支…

阿里云大数据MaxCompute计算资源分布以及LogView分析优化

摘要: MaxCompute(原ODPS)的概念 海量数据处理平台,服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案以及针对大数据的分析建模服务.(官方文档有这里就不多做介绍了)官方文档链接 优势 用户不必关心分布式计算细节&a…

计算机视觉领域还能耍什么花样?

从移动支付的自动贩卖机到刷脸支付的智能货柜;从亲自到柜台验证到人脸核身远程开卡;从排队买票、排队进门的糟糕旅游体验到提前预约,刷脸入园的智慧旅游;……从计算机视觉应用的产业板块上分析,以视频应用为基础的视频…

MaxCompute MapReduce

摘要: 大数据计算服务(MaxCompute)的功能详解和使用心得 点此查看原文:http://click.aliyun.com/m/41384/ 前言 MapReduce已经有文档,用户可以参考文档使用。本文是在文档的基础上做一些类似注解及细节解释上的工作。 功能介绍 MapReduce 说起…

Flowable springboot项目自定义中文字体

Flowable springboot项目自定义中文字体 摘要:在flowable框架中,当我们想要集成springboot框架的时候,可能要设置中文字体,flowable6.4之前的版本因为没有可以设置字体的属性,所以我们没法进行中文字体的设置&#xff…

java中怎么判断数组下标越界_初学java遇到疑惑,数组下标越界,求解答!

一个学生考试成绩录入程序的模块化设计,在编译时出现了数组下标越界错误提示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0;at Ch3Demo7.main(Ch3Demo7.java:26)class Ch3Demo7 //example{public stat…

漫画 | Kubernetes带你一帆风顺去远航

戳蓝字“CSDN云计算”关注我们哦!来源 | Google Cloud如果你是一个狂立学习flag却屡屡打脸的懒癌晚期,或者是一个对云计算方面云里雾里,不知所措的好学者,亦或是一位资深行业专家,都欢迎关注【CSDN云计算公众号】&…

java 连接已重置_Bitronix连接重置问题

我在部署到linux环境时似乎遇到了这个错误,不确定这是什么意思请有人帮我解释一下可能的解决办法吗?java.sql.SQLException:无法从bitronix.tm.resource.jdbc.PoolingDataSource.getConnection获取包含资源actdb的XAPool的PoolingDataSource的…

Kubernetes与Docker基本概念与常用命令对照

摘要: Docker是众多用户上手入门的基础容器和编排工具,提供了良好的开发者体验。Kubernetes是强大的容器编排平台,功能丰富。它们有很多概念和操作都有类似之处。我们今天会和大家对比基本概念与常用命令,可以方便熟悉Docker的用户…

flowable 设置流程跟踪高亮线的颜色

背景:在实际情况下,很多人对这个红色的高亮有意见,所以这里我把我的修改颜色的代码分享出来,希望对大家有帮助。(如果有问题可以加QQ群:633168411 里面很多高手,人也都非常善良) 效果…