SpringMVC处理方法支持如下的返回方式:ModelAndView,String, void,Model, ModelMap, Map,View,下面将对主要的返回方法进行说明:
ModelAndView :
通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 ,
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。该方法将处理后的数据和要返回的页面绑定在一起,大致相当于Request.setAttribute的作用,前台通过JSTL+EL表达式进行获取显示。
例如:将一个list集合返回到studentAssessDetial2页面
@RequestMapping(value = "/test")
public ModelAndView ceshi(HttpServletRequest request,
HttpServletResponse response) {
// 实例map
ModelAndView mav = new ModelAndView();
mav.setViewName("studentAssessDetial2");
String templateId = "QgBa6Dhhb7CPyYbs3mw9Go";
// 根据模板Id查询对应的考核项目
List<AssessContent> assessContentlist = assessContentBean.queryContentByTemplateId(templateId)
mav.addObject("aList", assessContentlist);
return mav;
}</span>
前台获取并显示:
<c:forEach items="${aList}" var="a" varStatus="status">
<tr>
<td><div id="${status.index+1}" name="assessSelectedDiv">
<c:out value="${status.index+1}" />、${a.assessContent}<br>
<c:forEach items="${a.weights}" var="b">
<input type="radio" name="${a.id}" value="${b.id}"class="answer">${b.weightContent}
<br/>
</c:forEach>
</div></td>
</tr>
</c:forEach>
Spring:
指定返回的视图页面名称,结合设置的返回地址路径加上页面名称后缀即可访问到。
@RequestMapping(value = "/testString")
public String ceshiString(HttpServletRequest request,
HttpServletResponse response) {
// 实例map
String templateId = "QgBa6Dhhb7CPyYbs3mw9Go";
// 根据模板Id查询对应的考核项目
List<AssessContent> assessContentlist = assessContentBean.queryContentByTemplateId(templateId);
request.setAttribute("assessContentlist", assessContentlist);
</span>return "/studentAssessDetial";
}
该实例会返回到studentAssessDetial页面,同样的通过JSTL+EL表达式可以再页面上显示出来数据
*前缀后缀在spring的配置文件中设置:
<span style="font-family:KaiTi_GB2312;"><mvc:annotation-driven />
<bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
<mvc:annotation-driven /></span>
void :
如果返回值为空,则响应的视图页面对应为访问地址
<span style="font-family:KaiTi_GB2312;">@RequestMapping(value = "/queryStudentAssess2")
public void findTeaCourseInfoByStuCode(HttpServletRequest request,
HttpServletResponse response) {
// 实例map
Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();
// 实例Jackson对象
JacksonJsonUntil jacksonJsonUntil = new JacksonJsonUntil();
try {
map.put("studentCode", "12040261009");
@SuppressWarnings("unchecked")
List<StudentTeachClass> StudentAssessList = schoolTeachingBean.findTeaCourseInfoByStuCodeInterface(map);
// 转换json
jacksonJsonUntil.beanToJson(response, StudentAssessList);
} catch (Exception e) {
e.printStackTrace();
}
}
</span>
Map:
与void类似
<span style="font-family:KaiTi_GB2312;"> @RequestMapping(value = "/testMap")
public Map ceshimap(HttpServletRequest request,
HttpServletResponse response) {
// 实例map
String templateId = "QgBa6Dhhb7CPyYbs3mw9Go";
// 根据模板Id查询对应的考核项目
List<AssessContent> assessContentlist = assessContentBean.queryContentByTemplateId(templateId);
Map<String,List<AssessContent>> map=new HashMap<String, List<AssessContent>>();
map.put("aList", assessContentlist);
return map;
}</span>
小结:
1.使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很大的灵活性,而模型数据又可以通过 ModelMap 控制。2.使用void,map,Model 时,返回对应的逻辑视图名称真实url为:prefix前缀+视图名称 +suffix后缀组成。
3.使用String,ModelAndView返回视图名称可以不受请求的url绑定,ModelAndView可以设置返回的视图名称。