java AbstractExcelView 在基于 Spring 的应用程序中已弃用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37983946/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
AbstractExcelView is deprecated in Spring-based application
提问by Viththal Joshi
I want implement exporting data to Excel file in my Spring-Boot-based application.
我想在基于 Spring-Boot 的应用程序中实现将数据导出到 Excel 文件。
When I intend use AbstractExcelView, but I know that AbstractExcelView
is deprecated. What is the alternate solution for export Excel file?
当我打算使用AbstractExcelView 时,但我知道这AbstractExcelView
已被弃用。导出 Excel 文件的替代解决方案是什么?
回答by Mudassar
As of Spring 4.2, instead of AbstractExcelView
you can try AbstractXlsView
and its AbstractXlsxView
and AbstractXlsxStreamingView
variants
在Spring 4.2的,而不是AbstractExcelView
你可以试着AbstractXlsView
和它AbstractXlsxView
与AbstractXlsxStreamingView
变种
One of the example is given below
下面给出了示例之一
import com.example.Course;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.web.servlet.view.document.AbstractXlsView;
import org.apache.poi.ss.usermodel.Workbook;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.DateFormat;
import java.util.List;
import java.util.Map;
public class XlsView extends AbstractXlsView {
private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT);
@Override
protected void buildExcelDocument(Map<String, Object> model,
Workbook workbook,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
// change the file name
response.setHeader("Content-Disposition", "attachment; filename=\"my-xls-file.xls\"");
@SuppressWarnings("unchecked")
List<Course> courses = (List<Course>) model.get("courses");
// create excel xls sheet
Sheet sheet = workbook.createSheet("Spring MVC AbstractXlsView");
// create header row
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("ID");
header.createCell(1).setCellValue("Name");
header.createCell(2).setCellValue("Date");
// Create data cells
int rowCount = 1;
for (Course course : courses){
Row courseRow = sheet.createRow(rowCount++);
courseRow.createCell(0).setCellValue(course.getId());
courseRow.createCell(1).setCellValue(course.getName());
courseRow.createCell(2).setCellValue(DATE_FORMAT.format(course.getDate()));
}
}
}
Another example
另一个例子
import com.example.Course;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.servlet.view.document.AbstractXlsxStreamingView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.DateFormat;
import java.util.List;
import java.util.Map;
public class XlsxStreamingView extends AbstractXlsxStreamingView {
private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT);
@Override
protected void buildExcelDocument(Map<String, Object> model,
Workbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// change the file name
response.setHeader("Content-Disposition", "attachment; filename=\"my-xlsxStreaming-file.xlsx\"");
@SuppressWarnings("unchecked")
List<Course> courses = (List<Course>) model.get("courses");
// create excel xls sheet
Sheet sheet = workbook.createSheet("Spring MVC AbstractXlsxStreamingView");
// create header row
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("ID");
header.createCell(1).setCellValue("Name");
header.createCell(2).setCellValue("Date");
// Create data cells
int rowCount = 1;
for (Course course : courses){
Row courseRow = sheet.createRow(rowCount++);
courseRow.createCell(0).setCellValue(course.getId());
courseRow.createCell(1).setCellValue(course.getName());
courseRow.createCell(2).setCellValue(DATE_FORMAT.format(course.getDate()));
}
}
}
回答by Polarfrosch100
I would like to complete this example, to get it running from scratch:
我想完成这个例子,让它从头开始运行:
Add the folowing to your Spring MVC Project.
将以下内容添加到您的 Spring MVC 项目中。
File: src/views.properties
文件:src/views.properties
excelView2.(class)=YourPackageName.XlsxStreamingView
File: WEB-INF/your_Spring_Config.xml
add an 'ResourceBundleViewResolver' with reference to 'views.properties'
文件:WEB-INF/your_Spring_Config.xml
参考“views.properties”添加一个“ResourceBundleViewResolver”
<bean id="viewResolver1" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="order" value="1" />
<property name="basename" value="views" />
</bean>
<bean id="viewResolver2"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2" />
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
File: src/YourPackageName/Course.java
文件:src/YourPackageName/Course.java
public class Course {
int Id;
String Name;
Date Date;
.. getter and setter
}
File: src/YourPackageName/MyController.java
文件:src/YourPackageName/MyController.java
package YourPackageName.MyController;
@Controller
@RequestMapping("/example")
public class CustomerController {
...
@GetMapping("downloadExcel")
public ModelAndView downloadExcel() {
System.out.println("inside downloadExcel");
// create some sample data
List<Course> listCourses = new ArrayList<Course>();
listCourses.add(new Course(1, "Polarfrosch100", new Date()));
listCourses.add(new Course(2, "Polarfrosch101", new Date()));
listCourses.add(new Course(3, "Polarfrosch102", new Date()));
// return a view which will be resolved by an excel view resolver
return new ModelAndView("excelView2", "courses", listCourses);
}
}
File: WEB-INF/view/your.jsp
文件:WEB-INF/view/your.jsp
...
<a href="${pageContext.request.contextPath}/example/downloadExcel">Download Excel Document</a>