【问题标题】:How to save new created xls file from model Spring MVC如何从模型 Spring MVC 中保存新创建的 xls 文件
【发布时间】:2013-07-20 16:19:25
【问题描述】:

我在将模型创建的 xls 书保存到硬盘时遇到问题。我正在使用 Springs AbstractExcelView

protected void buildExcelDocument(Map<String, Object> model,
            HSSFWorkbook workbook, HttpServletRequest request,
            HttpServletResponse response) throws Exception

问题是我无法让一个窗口弹出到用户屏幕,用户选择保存文件的位置并单击保存。

     //This class makes convertation from Spring MVC model to excel document
        public class PagetoExcelConverter extends AbstractExcelView{

            List<FormDate> attributesList = null;   

            //Create massive of constants for making table header
            private final String[] HEADER_NAMES_MASSIVE = {"Name",  "Type",  "Date", "Description"};


            @SuppressWarnings("unchecked")
            @Override
            protected void buildExcelDocument(Map<String, Object> model,
                    HSSFWorkbook workbook, HttpServletRequest request,
                    HttpServletResponse response) throws Exception {

                        //Creating new instance of ArrayList for add model attributes to
                    attributesList = new ArrayList<FormDate>();

                        //Adding model attributes to ArrayList
                        attributesList.addAll((List<FormDate>)model.get("findAttributes"));

                //Creating sheet inside of book with given name 
                Sheet sheet = workbook.createSheet("Result");
                    sheet.autoSizeColumn(0);

                //Making first row as a header 
                Row headerRow = sheet.createRow(0);

                       //Creating  head for table by iterating over HEADER_NAMES_MASSIVE
                for(int i=0; i<HEADER_NAMES_MASSIVE.length; i++) {      

                    Cell headCell = headerRow.createCell(i); 
                    headCell.setCellValue(HEADER_NAMES_MASSIVE[i]);
                    headCell.setCellStyle(headCellstyle);   

                    }


                    int rowNumber=1;

                //Add data to table by iterating over and attributes
                for(int i=0; i<attributesList.size(); i++) {

                    Row dataRow = sheet.createRow(rowNumber);
                    Cell dataCell;

                    int cellNumber=0;

                        dataCell = dataRow.createCell(cellNumber);
                        dataCell.setCellValue(attributesList.get(i).getFormDescriptionList().get(i).getInstitutions().getNameOfInstitution());

                        cellNumber++;

                        dataCell = dataRow.createCell(cellNumber);
                        dataCell.setCellValue(attributesList.get(i).getFormDescriptionList().get(i).getInstitutionType().getTypeOfInstitution());
                        dataCell.setCellStyle(dataCellstyle);

                        cellNumber++;

                        dataCell.setCellValue(attributesList.get(i).getParticularDate());

                        cellNumber++;

                        dataCell = dataRow.createCell(cellNumber);
                        dataCell.setCellValue(attributesList.get(i).getFormDescriptionList().get(i).getDaySchedule());
                        dataCell.setCellStyle(dataCellstyle);

                        cellNumber++;

                        dataCell = dataRow.createCell(cellNumber);
                        dataCell.setCellValue(attributesList.get(i).getFormDescriptionList());

                        cellNumber++;

                        }

                attributesList = null;

            }

    }   

所以,如果我把这段代码:

FileOutputStream fos = new FileOutputStream("/home/vadim/Desktop/mybook.xls");
                workbook.write(fos);

它保存一个文件,我指向它保存。但我想为用户弹出一个小窗口。

我在 webapp/WEB-INF/classes 中的 view.properties:

#This view property triggered from org.springframework.web.servlet.view.ResourceBundleViewResolver for xls converting
#Here is xlspage is name of the jsp page, is tied in with (class) with do converting model to xls
xlspage.(class)=edu.demidov.service.PagetoExcelConverter

我在 servlet-context 中的 viewResolvers 声明:

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/classes directory. Goes first -->
    <beans:bean id="xlsviewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <beans:property name="order" value="1" />
    <beans:property name="basename" value="views"/>
    </beans:bean>

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean id="jspviewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

【问题讨论】:

    标签: java spring spring-mvc apache-poi xls


    【解决方案1】:

    您应该为 Excel 视图创建一个 XmlViewResolver:

    <bean id="PagetoExcelConverter" class="edu.demidov.service.PagetoExcelConverter" />
    

    那么你的控制器应该返回 ModelAndView:

    return new ModelAndView("PagetoExcelConverter", "excelModel", excelModel);
    

    excelModel 是地图。更多详情请参阅tutorial

    【讨论】:

    • 先生,我有 viewResolver 它在我的 servlet 上下文中。我还获取模型数据来构建我的 xls 书。但是为什么我在一切准备就绪并准备好保存时没有显示窗口。
    • 通常,当您从控制器返回 ModelAndView 时,将显示该窗口(用于选择保存或打开文件的位置)(如我上面的回答所示)。
    • 我做了,但它弹出了带有 somefile 的窗口,但现在是 xls 文件。我猜该文件是我的 url 姓氏,没有扩展名。我该怎么办>??
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2011-06-05
    • 2019-02-03
    相关资源
    最近更新 更多