ModelAndView
ModelAndView中包含了一个model属性和一个view属性,model其实是一个ModelMap类型,
它是一个LinkedHashMap的子类,view包含了一些视图信息。
常用方法
/** 构造方法 **/
ModelAndView()
ModelAndView(String viewName) // 视图名,需要配置视图解析器先
ModelAndView(String viewName, String modelName, Object modelObject) // 视图名和一对模型(key-value)
/** 类方法 **/
ModelAndView addObject(String modelName,ObjectmodelObject) // 对象添加到模型中。
void setViewName(StringviewName) // 设置视图名
以下指定了JSP的视图解析器
<!-- JSP视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
使用
后台控制器这里设置渲染index.jsp视图,给视图添加了一个模型students
@RequestMapping(value = "/getAll", method = RequestMethod.GET)
@ResponseBody
public ModelAndView getAll() {
List<Student> students = studentService.findAll();
ModelAndView mv = new ModelAndView("index");
mv.addObject("students", students);
return mv;
}
以下是index.jsp的部分代码
<div id="all-div">
<table>
<thead>
<th>学号</th>
<th>名字</th>
<th>性别</th>
<th>分数</th>
</thead>
<tbody>
<c:forEach var="student" items="${students}">
<tr>
<td>${student.id}</td>
<td>${student.name}</td>
<td>${student.gender}</td>
<td>${student.grade}</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
需要引入以下几个指令
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- isELIgnored=“false” 不导入page指令的这个属性,浏览器将直接显示${student.grade}
- taglib是JSP的标签库指令
- <c:forEach var=“student” items="${students}">, items是后台加入的模型,也就是要迭代的对象。var是当前迭代对象。[for (i = 0; i < n; ++i)) 类似的这里的i就是var, n就是items]
当输入 xxx/getAll.do 时,将会打开index.jsp这个视图页面,同时也会渲染了这个表格数据。