15.5 视图和视图解析器

来源:互联网 发布:c语言冒泡排序 编辑:程序博客网 时间:2024/06/15 00:30

Controller类的方法处理完后,最终会返回一个ModelAndView对象。那些返回String、View、ModelMap等的方法,spring MVC会在内部把它们装配成ModelAndView对象

经过视图解析器(ViewResolver)可以得到视图:
这里写图片描述

jsp和jstl

例:

<!-- 视图解析器,将视图逻辑名解析为/WEB-INF/views/<viewName>.jsp  -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"    p:prefix="/WEB-INF/views/"    p:suffix=".jsp"></bean>

如果jsp引用了JSTL的国际化功能:
这里写图片描述
步骤:

1、在Controller类的配置文件baobaotao-servlet.xml中加上<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"    p:viewClass="org.springframework.web.servlet.view.JstlView"    p:prefix="/WEB-INF/views/"    p:suffix=".jsp"></bean>    <!--国际化资源  -->    <bean id="messageSource"        class="org.springframework.context.support.ResourceBundleMessageSource">        <property name="basenames">            <list>                <!-- 这儿的是src/conf/i18n下的messages.properties和content.properties,两个文件中放的都是一些属性常量信息,以便后期查询-->                <value>conf/i18n/messages</value>                <value>conf/i18n/content</value>            </list>        </property>    </bean>2、UserController.java中加上方法:    @RequestMapping(value = "/showUserList")    public String showUserList(ModelMap mm) {        Calendar calendar = new GregorianCalendar();        List<User> userList = new ArrayList<User>();        User user1 = new User();        user1.setUserName("tom");        user1.setRealName("汤姆");        calendar.set(1980, 1, 1);        user1.setBirthday(calendar.getTime());        User user2 = new User();        user2.setUserName("john");        user2.setRealName("约翰");        user2.setBirthday(calendar.getTime());        userList.add(user1);        userList.add(user2);        mm.addAttribute("userList", userList);        return "user/userList";    }3、web-inf/views/user/userList.jsp注:需要先在WEB-INF/lib下放jstl.jar和standard.jar否则会出错两个<fmt:message key=""/>标签,里面的内容都是在baobaotao-servlet.xml中声明的国际化资源里提到的文件messages.properties和content.properties里的常量信息<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%><html>    <head>        <title><fmt:message key="website.title"/></title>    </head>    <body>        <fmt:message  key="user.userList.title"/>        <table>            <c:forEach items="${userList}" var="user">                <tr>                    <td>                        <a href="<c:url value="/user/showUser/${user.userName}.html"/>">                        ${user.userName}                        </a>                    </td>                    <td>                        ${user.realName}                    </td>                </tr>            </c:forEach>            <table>    </body></html>4、测试http://localhost:8080/easy_springmvc_test/user/showUserList

生成excel

1、先写一个根据数据生成Excel的类

-- UserListExcelView.javapackage com.web;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.time.DateFormatUtils;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.springframework.stereotype.Component;import org.springframework.web.servlet.view.document.AbstractExcelView;import com.domain.User;// 使用POI技术创建Excel文档public class UserListExcelView extends AbstractExcelView {    @Override    protected void buildExcelDocument(Map<String, Object> model,            HSSFWorkbook workbook, HttpServletRequest request,            HttpServletResponse response) throws Exception {                response.setHeader("Content-Disposition", "inline; filename="+                 new String("用户列表".getBytes(), "utf-8"));          List<User> userList = (List<User>) model.get("userList");        HSSFSheet sheet = workbook.createSheet("users");        HSSFRow header = sheet.createRow(0);        header.createCell(0).setCellValue("帐号");        header.createCell(1).setCellValue("姓名");        header.createCell(2).setCellValue("生日");        int rowNum = 1;        for (User user : userList) {            HSSFRow row = sheet.createRow(rowNum++);            row.createCell(0).setCellValue(user.getUserName());            row.createCell(1).setCellValue(user.getRealName());            String createDate = DateFormatUtils.format(user.getBirthday(),                    "yyyy-MM-dd");            row.createCell(2).setCellValue(createDate);        }    }}

2、在配置文件baobaotao-servlet.xml中声明

    <!-- Excel视图解析器配置 -->    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"        p:order="10" />    <bean id="userListExcel" class="com.web.UserListExcelView" />

3、UserController.java中的方法:

    @RequestMapping(value = "/showUserListByXls")    public String showUserListInExcel(ModelMap mm) {        Calendar calendar = new GregorianCalendar();        List<User> userList = new ArrayList<User>();        User user1 = new User();        user1.setUserName("tom");        user1.setRealName("汤姆");        calendar.set(1980, 1, 1);        user1.setBirthday(calendar.getTime());        User user2 = new User();        user2.setUserName("john");        user2.setRealName("约翰");        user2.setBirthday(calendar.getTime());        userList.add(user1);        userList.add(user2);        mm.addAttribute("userList", userList);        return "userListExcel";    }

4、运行结果及分析:
输入http://localhost:8080/easy_springmvc_test/user/showUserListByXls,就会自动下载excel文件。
分析:showUserListInExcel方法返回的是return “userListExcel”;首先尝试找看看是否有userListExcel.jsp这个视图,结果没有。所以此时尝试在配置文件中看看是否有id是userListExcel的bean,找到了,按照此bean对应的类执行创建Excel即可。

0 0