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可以設置返回的視圖名稱。