如何使用el-table接收后端接口的数据,在前端显示
nlgmk 2024-06-21 15:33:02 阅读 90
前言
今天项目需求有变动,要求我在某一个页面上的右半部分加一个表格,动态的接收后端生成的某个csv文件的数据,说白了就是将后端生成的一个csv表格加到页面上。
准备工作:
1.前端需要引入elment-ui,使用el-table组件
2.后端使用的是springboot、
需要引入依赖,在pom文件中加入这个
<!-- 解析csv--> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version> </dependency>
具体流程:
(1)前端编写:
在这里解释一下el-table标签,data属性是指你要显示的数据,他需要是一个数组,数组里有多个对象,一个对象就是一行数据,当el-table
元素中注入data
对象数组后,在el-table-column
中用prop
属性来对应数据对象中的键名即可填入数据,用label
属性来定义表格的列名。可以使用width
属性来定义列宽。例如以下的数据就是四行,每行都显示2016-05-04 王小虎 上海市普陀区金沙江路 1518 弄,el-table-column指定了三列数据的列名是日期,姓名,地址,
数据来源是
tableData中对应的三个键date name address
<el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"> </el-table-column> <el-table-column prop="name" label="姓名" width="180"> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> </el-table>tableData: [{ date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' }]
故而我们的代码如下:
<div class="guihua_map1"> <div> //外面的div是我用来设置样式的块级标签 //里面的div用来放表格,具体的样式没写 <el-table :data="gnnwrresult.result" border height="500"> <el-table-column v-for="key in gnnwrresult.headlist" :key="key" :prop="key" :label="key" width="300"></el-table-column> </el-table> </div> </div>
data中的代码
data(){ return { gnnwrresult:{ result: [], headlist:[], } }}
我们建立一个对象gnnwrresult,来存数据,表格数据来自result,表头数据来自headlist,如果我们填上一些数据就变成下图,说明代码成功了
(2) 后端编写
如此一来我们只需要在后端读取csv文件,然后把数据封装到,我们构造一个pojo类中,它包含两个属性,对应这两个我们需要的数组。
后端pojo类
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;import java.util.List;import java.util.Map;@ToString //toString 方法@Data //set get 方法@NoArgsConstructor //无参构造@AllArgsConstructor//有参构造public class TableData { private List<String> headlist; private List<Map<String, String>> result;}
这个对象返回给前端时会转化成json,即TableData{“headlist”:["xxx","xxx","xxx"],"result":[{"":""},{xx:xx}]}这种
工具类,用来读取csv
/** * @Description 读取CSV文件的内容 * @Param filePath 文件存储路径 **/ public static TableData readCSV(String filePath) { BufferedReader bufferedReader = null; InputStreamReader inputStreamReader = null; FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream(filePath); inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); bufferedReader = new BufferedReader(inputStreamReader); CSVParser parser = CSVFormat.DEFAULT.parse(bufferedReader); List<String> headlist = new ArrayList<>(); List<Map<String, String>> result = new ArrayList<>(); int rowIndex = 0; //getRecords()返回一个 List<CSVRecord>,其中每个 CSVRecord 对象表示 CSV 文件中的一行数据。 for (CSVRecord record : parser.getRecords()) { if (rowIndex == 0) { // 读取表头 for (String column : record) { headlist.add(column); } } else { // 读取每行的内容 Map<String, String> rowMap = new HashMap<>(); for (int i = 0; i < record.size(); i++) { rowMap.put(headlist.get(i), record.get(i)); } result.add(rowMap); } rowIndex++; } TableData tableData = new TableData(); tableData.setHeadlist(headlist); tableData.setResult(result); return tableData; } catch (IOException e) { e.printStackTrace(); } finally { // 关闭流 if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (inputStreamReader != null) { try { inputStreamReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; }
(3)测试可用性
@RestController@RequestMapping("/gnnwr")public class GnnwrController { @GetMapping("/result") public TableData result(){ String path="C:\\Users\\lenovo\\Desktop\\gnnwr-0.1.5\\demo\\gtnnwr_result.csv"; TableData tableData =CsvUtils.readCSV(path); return tableData; }}
编写一个控制器,用来返回给数据到前端
使用HTTP cline模拟前端发送ajax请求(因为我自己还没写,只要测试成功,返回的和我刚刚写在前端的死数据一样就肯定没问题,跨域访问发送请求可以参考我之前的文章)
发送成功,查看相应的数据:
没有问题,这样只要拿到,加入data中就可以显示了。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。