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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 03:00:05  来源:igfitidea点击:

AbstractExcelView is deprecated in Spring-based application

javaspringspring-mvcspring-bootexport-to-excel

提问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 AbstractExcelViewis deprecated. What is the alternate solution for export Excel file?

当我打算使用AbstractExcelView 时,但我知道这AbstractExcelView已被弃用。导出 Excel 文件的替代解决方案是什么?

回答by Mudassar

As of Spring 4.2, instead of AbstractExcelViewyou can try AbstractXlsViewand its AbstractXlsxViewand AbstractXlsxStreamingViewvariants

在Spring 4.2的,而不是AbstractExcelView你可以试着AbstractXlsView和它AbstractXlsxViewAbstractXlsxStreamingView变种

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>