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即可。