一、完成任务模块
1. 超级管理员的试题管理模块
2. 管理员的学生管理模块
3.管理员的班级管理模块
二、核心代码:
Excel表格上传所需jar及配置文件
1. 在springmvc的配置文件中配置文件上传的相关配置:
2. 所需要的jar截图
下载链接在文章最后。
3. 前端页面layui代码截图
4. 封装的返回实体类
package com.hp.entity; import java.io.Serializable; import java.util.List; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; /** * 自定义响应结构 */ public class ResponseResult implements Serializable { // 定义jackson对象 private static final ObjectMapper MAPPER = new ObjectMapper(); // 响应业务状态 private Integer code; // 响应消息 private String msg; // 响应中的数据 private Object data; // 总数量 private Integer count; public static ResponseResult build(Integer code, String msg, Object data) { return new ResponseResult(code, msg, data); } public static ResponseResult build(Integer code, String msg, Integer count, Object data) { return new ResponseResult(code, msg, count, data); } public static ResponseResult ok(Object data) { return new ResponseResult(data); } public static ResponseResult ok() { return new ResponseResult(null); } public ResponseResult() { } public static ResponseResult build(Integer code, String msg) { return new ResponseResult(code, msg, null); } public ResponseResult(Integer code, String msg, Object data) { this.code = code; this.msg = msg; this.data = data; } public ResponseResult(Integer code, String msg, Integer count, Object data) { this.code = code; this.msg = msg; this.data = data; this.count = count; } public ResponseResult(Object data) { this.code = 0; this.msg = "OK"; this.data = data; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } /** * 将json结果集转化为TaotaoResult对象 * * @param jsonData json数据 * @param clazz TaotaoResult中的object类型 * @return */ public static ResponseResult formatToPojo(String jsonData, Class<?> clazz) { try { if (clazz == null) { return MAPPER.readValue(jsonData, ResponseResult.class); } JsonNode jsonNode = MAPPER.readTree(jsonData); JsonNode data = jsonNode.get("data"); Object obj = null; if (clazz != null) { if (data.isObject()) { obj = MAPPER.readValue(data.traverse(), clazz); } else if (data.isTextual()) { obj = MAPPER.readValue(data.asText(), clazz); } } return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(), jsonNode.get("count").intValue(), obj); } catch (Exception e) { return null; } } /** * object对象的转化 * * @param json * @return */ public static ResponseResult format(String json) { try { return MAPPER.readValue(json, ResponseResult.class); } catch (Exception e) { e.printStackTrace(); } return null; } /** * Object是集合转化 * * @param jsonData json数据 * @param clazz 集合中的类型 * @return */ public static ResponseResult formatToList(String jsonData, Class<?> clazz) { try { JsonNode jsonNode = MAPPER.readTree(jsonData); JsonNode data = jsonNode.get("data"); Object obj = null; if (data.isArray() && data.size() > 0) { obj = MAPPER.readValue(data.traverse(), MAPPER.getTypeFactory().constructCollectionType(List.class, clazz)); } return build(jsonNode.get("code").intValue(), jsonNode.get("msg").asText(), jsonNode.get("count").intValue(), obj); } catch (Exception e) { return null; } } }
5. controller代码
//批量添加 @RequestMapping("/excelItemBank") @ResponseBody public ResponseResult excelStudent(HttpServletRequest request) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile file = multipartRequest.getFile("file"); if (file.isEmpty()) { return ResponseResult.build(1, "文件不存在!"); } String msg = itemBankService.ajaxUploadExcel(file); if (msg.equals("导入成功!")) { return ResponseResult.build(0, msg); } else { return ResponseResult.build(1, msg); } }
6. service代码
@Override public String ajaxUploadExcel(MultipartFile file) { // TODO Auto-generated method stub // 获取IO流 InputStream in = null; try { in = file.getInputStream(); } catch (IOException e) { e.printStackTrace(); return "系统导入表格出错!"; } // 获取IO流的数据 List<List<Object>> listob = null; try { listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); } catch (Exception e) { e.printStackTrace(); return "系统获取表格内容出错!"; } // 对表格内容进行初步检验,避免同一张表中,有些人注册了有些人没有,不能重新导入表格 for (int i = 0; i < listob.size(); i++) { List<Object> lo = listob.get(i); // 对表格内容是否缺少,格式是否正确进行检查 try { String.valueOf(lo.get(0));//科目 String.valueOf(lo.get(1));//题目 String.valueOf(lo.get(2));//选项A String.valueOf(lo.get(3));//选项B String.valueOf(lo.get(4));//选项C String.valueOf(lo.get(5));//选项D String.valueOf(lo.get(6));//类别 String.valueOf(lo.get(7));//答案 Integer.valueOf(String.valueOf(lo.get(8)));//难度 } catch (Exception e) { return "表格内容有误,请重新导入表格!"; } // 该处检查Excel中的賬戶名在数据库中是否已存在,如果已存在,直接return /* * j = managerDao.selectByName(String.valueOf(lo.get(0))); if (j != null) { * return "账户名" + String.valueOf(lo.get(0)) + "已存在"; } */ } // 该处可调用service相应方法进行数据保存到数据库中,现只对数据输出 for (int i = 0; i < listob.size(); i++) { List<Object> lo = listob.get(i); //根据校区名字查询对应实体 Subject sub = subjectDao.selectByName(String.valueOf(lo.get(0))); ItemBank bank = new ItemBank(); bank.setSubject(sub); bank.setTopic(String.valueOf(lo.get(1))); bank.setOptionA(String.valueOf(lo.get(2))); bank.setOptionB(String.valueOf(lo.get(3))); bank.setOptionC(String.valueOf(lo.get(4))); bank.setOptionD(String.valueOf(lo.get(5))); bank.setType(String.valueOf(lo.get(6))); bank.setAnswer(String.valueOf(lo.get(7))); bank.setDifficulty(Integer.valueOf(String.valueOf(lo.get(8)))); //写入数据库 itemBankDao.add(bank); } return "导入成功!"; }
以上功能为表格上传,并将数据添加到数据库。
补充关于layui的几个问题:
1. 前端报错405 (method is not allowed),控制台报错提示Request method 'POST' not supported
原因:请求路径出现了问题。认真检查页面的请求路径。我就是路径少写一个字母。
2. layui在显示含有html标签的字符串时,无法直接显示
解决办法:
三、项目燃尽图更新如下:
源码资料链接:链接:https://pan.baidu.com/s/1e--85shv3VqYbqxOnLY_oA
提取码:uj5c