15.5 视图和视图解析器

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.java
package 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值