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 인터페이스를 사용합니다.