SpringMVC(二七) 自定义视图

可以参考博客http://www.cnblogs.com/parryyang/p/5683600.html,举例很清晰。

对自定义的视图名称匹配不同的解析器进行解析。

作用:自己定义视图,视图继承view类或者abstractExcelView或者abstractPdfView,将内容以Excel或者PDF格式显示。

 

关键的实现过程:

1. 创建excelView视图,继承AbstractXlsxView。

 参考如下代码,实现功能:从modelAndView中获取model数据,作为excel视图显示。   

package com.tiekui.springmvc.views;

import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
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.tiekui.springmvc.pojo.User;

public class excelView extends AbstractXlsxView {

    @Override
    protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        
        String fileName = "UserList.xlsx";
        response.setCharacterEncoding("UTF-8");  
        response.setContentType("application/ms-excel");  
        response.setHeader("Content-Disposition", "inline; filename="+new String(fileName.getBytes(),"iso8859-1"));  
        OutputStream outputStream = response.getOutputStream();
        
        System.out.println(model.get("userList"));
        List<User> userList = (List<User>) model.get("userList");
        // 产生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 (User user : userList) {
            Row row = sheet.createRow(rowNumber++);
            // 产生标题列
            row.createCell(0).setCellValue(user.getAge());
            row.createCell(1).setCellValue(user.getUsername());
            row.createCell(2).setCellValue(user.getEmail());
            row.createCell(3).setCellValue(user.getPassword());
        }
        workbook.write(outputStream);
        outputStream.flush();
        outputStream.close();
        
    }

}
View Code

 

2.创建控制器。

  参考如下代码,实现功能:访问相关URL时,直接去访问创建的excelView视图。

  

package com.tiekui.springmvc.handlers;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.sun.org.apache.xpath.internal.operations.Mod;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
import com.tiekui.springmvc.pojo.User;
import com.tiekui.springmvc.views.excelView;

@Controller
public class ExcelViewTest {

    @RequestMapping("excelView")
    public ModelAndView excelViewTest(User user) {
        Map<String, Object> model = new HashMap<>();
        ArrayList<User> userlist = new ArrayList<>();
        userlist.add(user);
        model.put("userList", userlist);
        ModelAndView modelAndView = new ModelAndView(new excelView(),model);
        return modelAndView;
    }
    
}

3.访问视图index.jsp

  

    <form action="excelView">
    username : <input type="text" name="username" value="1">
    <br>
    password : <input type="password" name="password" value="1">
    <br>
    email : <input type="text" name="email" value="1">
    <br>
    age : <input type="text" name="age" value="1">
    <br>
    province : <input type="text" name="address.province" value="1">
    <br>
    city : <input type="text" name="address.city" value="1">
    <br>
    <input type="submit" value="PojoTest">
    </form>

4.SpringMVC配置文件中必须添加以下内容: 

<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
    <property name="order" value="0"></property>
</bean>

 

posted @ 2017-02-05 21:57  铁皮子周  阅读(1396)  评论(0)    收藏  举报