Spring 3 MVCの最適な実践と理解(9)


個人学習の参考になるので、スプレーしないでください. 
 
9.複数のリソースを実現するExcelとPDFビューを作成します.
ここで特定の日付の予約メッセージを生成するための要約レポートのコントローラはクラスです.
@Controller
@RequestMapping("/reservationSummary*")
public class ReservationSummaryController {
    private ReservationService reservationService;

    @Autowired
    public ReservationSummaryController(ReservationService reservationService) {
        this.reservationService = reservationService;
    }
	
    @RequestMapping(method = RequestMethod.GET)
	public String generateSummary(
	   @RequestParam(required = true, value = "date") String selectedDate, Model model) { 
	   List<Reservation> reservations = java.util.Collections.emptyList();
	try { 
	    Date summaryDate = new SimpleDateFormat("yyyy-MM-dd").parse(selectedDate);
	    reservations = reservationService.findByDate(summaryDate);
	} catch (java.text.ParseException ex) { 
	    StringWriter sw = new StringWriter();
	    PrintWriter pw = new PrintWriter(sw);
	    ex.printStackTrace(pw); 
	    throw new ReservationWebException("Invalid date format for reservation summary",new Date(),sw.toString());
	}
	model.addAttribute("reservations",reservations);		
	
	return "reservationSummary";
    }
}
 
上のコードからは、同じ論理ビューを返しているかが明確に分かります.「reervationSummary」です. 
 
9.1)Excelビューを作成します.
ここではApache POIライブラリのサポートを追加する必要があります.
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.5-FINAL</version>
	<type>jar</type>
	<scope>compile</scope>
</dependency>
 
 Excelビューを作成する処理クラス:
public class ExcelReservationSummary extends AbstractExcelView {

    @SuppressWarnings({ "rawtypes", "unchecked", "deprecation" })
	protected void buildExcelDocument(Map model, HSSFWorkbook workbook,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        List<Reservation> reservations = (List) model.get("reservations");
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        HSSFSheet sheet = workbook.createSheet();

        HSSFRow header = sheet.createRow(0);
        header.createCell((short) 0).setCellValue("Court Name");
        header.createCell((short) 1).setCellValue("Date");
        header.createCell((short) 2).setCellValue("Hour");
        header.createCell((short) 3).setCellValue("Player Name");
        header.createCell((short) 4).setCellValue("Player Phone");

        int rowNum = 1;
        for (Reservation reservation : reservations) {
            HSSFRow row = sheet.createRow(rowNum++);
            row.createCell((short) 0).setCellValue(reservation.getCourtName());
            row.createCell((short) 1).setCellValue(
                    dateFormat.format(reservation.getDate()));
            row.createCell((short) 2).setCellValue(reservation.getHour());
            row.createCell((short) 3).setCellValue(
                    reservation.getPlayer().getName());
            row.createCell((short) 4).setCellValue(
                    reservation.getPlayer().getPhone());
        }
    }
}
 ここでは、リソースセットファイルにExcelリソースの処理方法を追加する必要があります.(もちろん、他の方法でも登録できます.論理ビューとビューオブジェクトのマッピングを完了するだけでいいです.)
reservationSummary.(class)=com.apress.springrecipes.court.web.view.ExcelReservationSummary
ここではhttp://localhost:7070/Spring3MVC/reservationSummary.xls?date=2011-07-31方式でエクセルビューリソースが必要です.もちろんこのリソースは地元にダウンロードされました.
 
9.2)PDFビューを作成します. 
ここでiTextライブラリのサポートを追加する必要があります.
<dependency>
	<groupId>com.lowagie</groupId>
	<artifactId>itext</artifactId>
	<version>2.1.7</version>
	<type>jar</type>
	<scope>compile</scope>
</dependency>
 
PDFビューの処理クラスを作成します.
public class PdfReservationSummary extends AbstractPdfView {

    @SuppressWarnings({ "rawtypes", "unchecked" })
	protected void buildPdfDocument(Map model, Document document,
            PdfWriter writer, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        List<Reservation> reservations = 
	    (List<Reservation>) model.get("reservations");
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Table table = new Table(5);

        table.addCell("Court Name");
        table.addCell("Date");
        table.addCell("Hour");
        table.addCell("Player Name");
        table.addCell("Player Phone");
	
	if(!reservations.isEmpty()) { 
	    for (Reservation reservation : reservations) {
		table.addCell(reservation.getCourtName());
		table.addCell(dateFormat.format(reservation.getDate()));
		table.addCell(Integer.toString(reservation.getHour()));
		table.addCell(reservation.getPlayer().getName());
		table.addCell(reservation.getPlayer().getPhone());
	    }
	}

        document.add(table);
    }
}
 ここではまだ資源集が必要です. ファイルにpdfリソースの処理方法を追加し、上のExcelマッピングと同じリソースセットに追加できません. は、同じリソースセットです. で同じキーの値にしてはいけません.
reservationSummary.(class)=com.apress.springrecipes.court.web.view.ExcelReservationSummary
ここでは、http://localhost:7070/Spring3MVC/reservationSummary.pdf?date=2011-07-31によって、pdfビューリソースが必要とされるが、もちろん、このリソースはローカルにダウンロードされたものである.  
 
----------------------------------------------------------
添付ファイルはシリーズ記事の例示コードで、eclipse 3.7.1で実行されます.
 
参考:
jyonのブログ:を選択します spring 3 MVC国際化支援の中国語文字化け」
Gary Markなどの書籍:「Spring Recipes」2 d