스프링 MVC 예 : 엑셀 뷰를 사용하여

  Excel 용, 스프링 MVC는보기 인터페이스를 구현 AbstractXlsView을 사용하는 것이 좋습니다, 그 이름도 그냥 추상 클래스임을 알 수 있으며, 인스턴스 객체를 생성 할 수 없습니다. 자체는 달성하기 위해 이동 --buildExcelDocument 추상적 인 방법을 정의합니다. 우리가 당신을 엑셀의보기 기능을 사용할 수있는이 방법을 수행하기위한 있도록 AbstractXlsView 봄의 다른 방법이 달성 된
  buildExcelDocument 주요 업무는 통합 문서의 방법을 생성하는 것입니다, 우리가 다운로드하는 데 필요한 POI API를 사용하는 것입니다 프로젝트로 가져올. 코드의 인수도 제공되는 경우, 스프링 MVC에서 패키지를 많이했다 Excel로 우리가 걱정하지 않아도 너무 많은 세부 사항을 수출하고있다.

<! - POI -> 
< 의존성 > 
    < 의 groupId > org.apache.poi </ 의 groupId > 
    < artifactId를 > POI </ artifactId를 > 
    < 버전 > 3.17 </ 버전 > 
</ 의존성 >

 

  이 기능은 정보의 모든 역할을 내보낼 가정하지만, 미래에 어쩌면 다른 수출 능력이있다. 편의를 위해, 먼저 인터페이스를 정의,이 인터페이스는 15-46 목록에 나온 주요 사용자 정의 규칙은, 개발자가 Excel을 생성 할 수있다.
  사용자 정의 내보내기 인터페이스 정의 : 15-46 목록

패키지 com.ssm.chapter15.view, 

가져 오기 org.apache.poi.ss.usermodel.Workbook, 

수입 되고있는 java.util.Map; 

공용  인터페이스 ExcelExportService { 

    / ** * 
     * 엑셀 파일 생성 규칙 
     * @param 모델 데이터 모델 
     * @ PARAM 통합 문서 Excel 통합 문서
      * / 
    공공  무효 makeWorkBook (지도 <문자열, 개체> 모델, 통합 문서 통합 문서); 

}

 

  이 인터페이스는 수출 목적으로, 엑셀 뷰 클래스 --ExcelView의 인스턴스를 완료해야합니다으로도 파일 이름을 다운로드해야이보기 논리도 아니기 때문에, 또한, 파일 이름 (파일 이름) 속성을 정의 15-47 목록과 같이 정의 뷰 리졸버를 실행 할 필요가 없습니다.
  목록 15-47 : 엑셀 뷰를 정의

패키지 com.ssm.chapter15.view; 

수입 java.util.Map;
수입 나오는 javax.servlet.http.HttpServletRequest;
수입 의 javax.servlet.http.HttpServletResponse; 

수입 org.apache.poi.ss.usermodel.Workbook;
수입 org.springframework.util.StringUtils;
수입 org.springframework.web.servlet.view.document.AbstractXlsView; 

공공  클래스 ExcelView는 확장 AbstractXlsView { 

    // 文件名
    개인 문자열 파일 이름 = 널 (null)을 ; 

    // 导出视图自定义接口
    개인 ExcelExportService excelExpService = 널 (null) ;

    // 构造方法1 
    공개 ExcelView (ExcelExportService excelExpService) {
          .excelExpService = excelExpService; 
    } 

    // 构造方法이 
    공공 ExcelView (문자열 viewName과, ExcelExportService excelExpService) {
         .setBeanName (viewName과); 
    } 

    공공 문자열려면 getFilename은 () {
         반환 파일 이름을; 
    } 

    공공  공극 setFileName (문자열 파일명) {
          .fileName = fileName에; 
    } 

    공공 ExcelExportService getExcelExpService () {
         반환  excelExpService을;
    }

    공공  무효 setExcelExpService (ExcelExportService excelExpService) {
         다음은이 .excelExpService = excelExpService가; 
    } 

    @Override가 
    보호  무효 buildExcelDocument (지도 <문자열, 개체> 모델은 통합 문서 통합 문서, HttpServletRequest의 요청은 HttpServletResponse를 응답) 가 발생 예외 { 

        // 어떤 사용자 지정 인터페이스 
        IF를 (excelExpService을 == null이 ) {
             던져  새로운 새로운 말고 RuntimeException ( "수출 서비스 인터페이스가 null !! 수 없습니다" ); 
        } 
        // 빈 문자열 요청 경로는 파일 이름으로 사용, 파일 이름이 비어 있지 
        IF ! ( StringUtils.isEmpty ( fileName에)) {

            // 문자 변환 
            문자열 reqCharset = request.getCharacterEncoding (); 
            reqCharset = reqCharset == null이 "UTF-8"? : ReqCharset, 
            fileName에 = 새로운 새로운 문자열 (fileName.getBytes (reqCharset), "ISO8859-1" );
             // 아래의 파일 이름을 설정 
            response.setHeader ( "내용 - 처리", "첨부 파일, 파일 이름 ="+ fileName에); 
        } 
        // 사용자 정의 엑셀 문서를 생성하는 데 사용되는 콜백 인터페이스 방법 
        excelExpService.makeWorkBook (모델, 통합 문서); 
    } 
}

 

  코드를 생성하는 상기 방법에 따라서 도면 클래스 완료의 Excel buildExcelDocument을 구현한다. 콜백 인터페이스 방법은 Excel을 생성하는 사용자 정의 규칙의 필요에 따라 사용자 정의 할 수 있습니다, 우리는 15-48 목록에서와 같이, 역할의 모든 요구 사항을 내보낼 충족하기 위해, 컨트롤러의 역할에 참여하는 새로운 방법이 필요합니다.

  목록 15-48 : 엑셀 내보내기 ExcelView 사용

패키지 com.ssm.chapter15.controller; 

수입 com.ssm.chapter15.pojo.PageParams;
수입 com.ssm.chapter15.pojo.Role;
수입 com.ssm.chapter15.pojo.RoleParams;
수입 com.ssm.chapter15.view.ExcelExportService;
수입 com.ssm.chapter15.view.ExcelView;
수입 org.apache.poi.ss.usermodel.Row;
수입 org.apache.poi.ss.usermodel.Sheet;
수입 org.apache.poi.ss.usermodel.Workbook;
수입 org.springframework.stereotype.Controller;
수입 org.springframework.web.bind.annotation.RequestMapping;
수입org.springframework.web.bind.annotation.RequestMethod;
 오기 org.springframework.web.servlet.ModelAndView는, 

수입 의 java.util.ArrayList의,
 가져 오기 가 java.util.List;
 수입 되고있는 java.util.Map; 

@Controller 
@RequestMapping ( " / 엑셀 " )
 공개  수업 ExcelController { 

    @RequestMapping (값 ="/ 내보내기 "방법 = RequestMethod.GET)
     공공 의 ModelAndView 수출 () {
         // 모델과 뷰 
        의 ModelAndView = 뮤직 비디오 새로운 새 의 ModelAndView ();
         // 엑셀 뷰 및 제공 사용자 지정 수출 인터페이스 
        ExcelView EV = 새로운 새로운ExcelView (ExportService ());
         // 파일 이름 
        ev.setFileName ( "모든 역할 .xlsx '에" );
         //  // 설정된 SQL 백엔드 매개 변수
         // RoleParams roleParams는 = 새로운 새로운 RoleParams은 ();
         //  // 제한 10000
         / / PageParams 페이지 PageParams 새로운 새로운 = ();
         // page.setStart (0);
         // page.setLimit (10000);
         // roleParams.setPageParams (페이지);
         // 쿼리
         // 목록 <역할>의 RoleList = roleService.findRoles (roleParams) 
        에서 <역할> =의 RoleList 새로운 새로운 ArrayList를 <> (); 
        RoleList.add ( 새로운 새로운 역할 (1L, "사수", "원격 물리적 출력" )); 
        RoleList.add ( 새로운 새로운 역할 (2L, "마스터", "마법 출력" ));
         // 추가 데이터 모델 
        mv.addObject ( "의 RoleList" ,의 RoleList) 
        mv.setView (EV) 
        반환 뮤직 비디오를; 
    } 

    @SuppressWarnings ({ "검사되지 않은" })
     개인 ExcelExportService ExportService () {
         // 엑셀 람다 식 정의 규칙을 유도하여 
        수익 (지도 <문자열, 오브젝트> 모델, 통합 문서 통합 문서) -> {
             // 사용자 목록 가져 오기 
            목록 <역할>의 RoleList = (목록 <역할>) model.get ( "의 RoleList")
             생성 시트 
            시트 시트 = workbook.createSheet ( "모든 문자" );
             // 로드 제목 
            행 제목 sheet.createRow = (0 ); 
            title.createCell ( 0) .setCellValue ( "번호" ); 
            title.createCell ( . 1 ) .setCellValue는 ( "이름" ); 
            title.createCell이 ( 2) .setCellValue ( "주" );
             // 역할을 편리하게 목록, 데이터 행 생성 에 대한을 ( int로 전 = 0; 나는 roleList.size를 (<); 내가 ++ ) { 
                역할 역할 = roleList.get (I)
                 INT rowIdx는 = I + 1. ; //
             
                행의 행 =sheet.createRow (rowIdx); 
                row.createCell ( 0 ) .setCellValue (role.getId ()); 
                row.createCell ( 1 ) .setCellValue (role.getRoleName ()); 
                row.createCell ( 2 ) .setCellValue (role.getNote ()); 
            } 
        }; 
    } 

}

 

  이것에 엑셀을 수출하고, 람다 표현식을 사용하여 ExcelExportService 인터페이스를 달성 할 수 있습니다, 그래서 Java 버전 8 이상, 자바 (8)의 다음 버전을 달성하기 위해 익명 클래스를 사용할 수 있습니다. 이것은 당신이 필요에 따라 개발할 수 있도록 자체 컨트롤러에 수출 규칙을 사용자 정의 할 수 있습니다, ExcelExportService 인터페이스를 사용합니다.

추천

출처www.cnblogs.com/ooo0/p/11109081.html