2013-07-20 30 views
0

我有一個問題可以保存從模型創建的xls圖書到硬盤驅動器。我使用的溫泉AbstractExcelView如何從模型中保存新創建的xls文件Spring MVC

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); 

它保存在那裏我點它來保存文件。但我想爲用戶彈出一個小窗口。

我的web應用/ 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 

我viewResolvers聲明中的servlet上下文:

<!-- 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> 

回答

0

您應該爲Excel視圖中創建一個XmlViewResolver:

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

然後你的控制器應該返回ModelAndView:

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

該excelModel是地圖。欲瞭解更多詳情,請參閱tutorial

+0

先生,我有viewResolver它在我的servlet上下文中。並且我還可以獲取模型數據來構建我的xls書。但爲什麼我沒有窗口顯示,當所有準備好和準備保存。 –

+0

當您從控制器返回ModelAndView時(如上面的答案所示),通常會顯示該窗口(用於選擇保存或打開文件的位置)。 –

+0

我做了,但它彈出與somefile窗口,但現在xls文件。我猜這個文件是我的網址姓氏,沒有擴展名。我該如何處理>? –