Spring MVC 學習筆記 3《3.1 自定義視圖》

添加依賴

/ssm/pom.xml

	。。。
  	<properties>
		<!-- Excel工具包  JDK7最高到3.17 -->
		<poi.version>3.17</poi.version>
	</properties>
	<dependencies>
		<!-- ================================= 自定義視圖 ================================= -->
		<!-- poi:用於支持 .xls -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<!-- poi-ooxml:用於支持 .xlsx -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>${poi.version}</version>
		</dependency>
		<!-- A Free Java-PDF library -->
        <dependency>  
           <groupId>com.lowagie</groupId>  
           <artifactId>itext</artifactId>  
           <version>2.1.7</version>  
        </dependency>
		<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.1.0</version>
        </dependency>
	</dependencies>
	。。。

SpringMVC 配置自定義視圖

/ssm/src/main/resources/spring-mvc.xml

	。。。
	<!-- =========================== 自定義視圖 =========================== -->
	<!-- 通過控制器返回字符串解析視圖:prefix + 控制器返回的字段串 + suffix 拼接出視圖 URL-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
	<!-- 通過視圖的名字來解析視圖:order 值越小優先級越低。InternalResourceViewResolver的order默認爲Integer的最大值 -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="0"></property>
    </bean
	。。。

自定義視圖

ExcelView

/ssm/src/main/java/com/jerry/ssm/views/ExcelView.java

package com.jerry.ssm.views;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.servlet.view.document.AbstractXlsxView;
import com.jerry.ssm.entity.Poem;

/**
 * Excel自定義視圖。 創建excel文件,用model傳進來的數據填充sheet,最後輸出流到客戶端
 * @author jerry
 */
public class ExcelView extends AbstractXlsxView {

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

		String fileName = new String("poem.xlsx".getBytes(), "iso8859-1");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/ms-excel");
		response.setHeader("Content-Disposition", "inline; filename=" + fileName);

		OutputStream outputStream = response.getOutputStream();

		List<Poem> list = (List<Poem>) model.get("poemList");

		// 產生Excel表頭
		Sheet sheet = workbook.createSheet("詩詞");
		Row header = sheet.createRow(0);
		// 產生標題列
		header.createCell(0).setCellValue("ID");
		header.createCell(1).setCellValue("標題");
		header.createCell(2).setCellValue("作者");
		header.createCell(3).setCellValue("內容");
		CellStyle cellStyle = workbook.createCellStyle();
		cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));
		int rowNumber = 1;
		for (Poem poem : list) {
			Row row = sheet.createRow(rowNumber++);
			// 寫入數據行
			row.createCell(0).setCellValue(poem.getId());
			row.createCell(1).setCellValue(poem.getTitle());
			row.createCell(2).setCellValue(poem.getAuthor());
			row.createCell(3).setCellValue(poem.getContent());
		}
		workbook.write(outputStream);
		outputStream.flush();
		outputStream.close();
	}
}

PDFView

/ssm/src/main/java/com/jerry/ssm/views/PDFView.java

package com.jerry.ssm.views;

import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.AbstractPdfView;
import com.jerry.ssm.entity.Poem;
import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

public class PDFView extends AbstractPdfView {

	@SuppressWarnings("unchecked")
	@Override
	protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer,
			HttpServletRequest request, HttpServletResponse response) throws Exception {

		String fileName = new String("poem.pdf".getBytes(), "iso8859-1");

		// 設置response方式,使執行此controller時候自動出現下載頁面,而非直接使用excel打開
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

		List<Poem> list = (List<Poem>) model.get("poemList");

		BaseFont bfChinese = BaseFont.createFont("C://Windows//Fonts//msyh.ttf", BaseFont.IDENTITY_H,
				BaseFont.NOT_EMBEDDED);
		com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);

		for (Poem poem : list) {
			String str = "ID: " + poem.getId() 
			+ "標題: " + poem.getTitle() 
			+ "作者: " + poem.getAuthor() 
			+ "正文: " + poem.getContent();
			document.add(new Paragraph(str, FontChinese));
		}
	}
}

控制器

/ssm/src/main/java/com/jerry/ssm/controller/PoemController.java

package com.jerry.ssm.controller;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.jerry.ssm.entity.Poem;
import com.jerry.ssm.service.IPoemService;
import com.jerry.ssm.views.ExcelView;
import com.jerry.ssm.views.PDFView;

@Controller
@Scope("prototype")
public class PoemController {
	@Resource
	private IPoemService poemService;
	。。。
	/**
	 * 下載 excel
	 * http://localhost/excel
	 */
	@RequestMapping(value = "/excel")
    public ModelAndView viewExcel() {
        Map<String, Object> model = new HashMap<>();
        model.put("poemList", poemService.getAll());
        return new ModelAndView(new ExcelView(), model);
    }
	
	/**
	 * 下載 pdf
	 * http://localhost/pdf
	 */
	@RequestMapping(value = "/pdf")
	public ModelAndView viewPDF() {
		Map<String, Object> model = new HashMap<>();
		model.put("poemList", poemService.getAll());
		return new ModelAndView(new PDFView(), model);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章