自訂 View Class


您 可以繼承org.springframework.web.servlet.view.AbstractView自訂自己的View類別,以產生所需的 View層展示技術,這邊以產生Pdf的結果頁面為例,您可以直接繼承 org.springframework.web.servlet.view.document.AbstractPdfView類別,並重新定義它的 buildPdfDocument()方法,例如:
  • CustomPdfView.java
package onlyfun.caterpillar;

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

public class CustomPdfView extends AbstractPdfView {
protected void buildPdfDocument(Map model,
Document document,
PdfWriter writer,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String header = (String) model.get("header");

Paragraph headerParagraph =
new Paragraph(header);
headerParagraph.font().setSize(20);
document.add(headerParagraph);

String content = (String) model.get("content");
Paragraph contentParagraph =
new Paragraph(content);
document.add(contentParagraph);

String copyright = (String) model.get("copyright");
Paragraph copyrightParagraph =
new Paragraph(copyright);
copyrightParagraph.setAlignment(
Paragraph.ALIGN_BOTTOM);
document.add(copyrightParagraph);
}
}

假設在您的Controller中提供了Model資料物件:
  • PdfController.java
package onlyfun.caterpillar;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class PdfController implements Controller {
public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse res) throws Exception {
Map model = new HashMap();
model.put("header", "Pdf View Test");
model.put("content", "This is content for pdf view test.");
model.put("copyright", "openhome.cc");

return new ModelAndView("customPdfView", model);
}
}

而在Bean定義檔中是這麼設計的:
  • mvc-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="viewResolver"
class="org.springframework.web.servlet.
→ view.BeanNameViewResolver"/>

<bean id="customPdfView"
class="onlyfun.caterpillar.CustomPdfView"/>

<bean name="/pdf.do"
class="onlyfun.caterpillar.PdfController"/>
</beans>

則接上/pdf.do時,會顯示pdf的結果畫面。