SpringMVC——Controller常用返回值的處理

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



發佈了145 篇原創文章 · 獲贊 183 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章