Spring框架學(xué)習(xí)二篇外----在WEBMVC學(xué)習(xí)遇到的問題
Posted on 2006-05-25 18:10 柳隨風(fēng) 閱讀(3680) 評(píng)論(3) 編輯 收藏 所屬分類: 開源框架這兩天在學(xué)習(xí)SpringMVC遇到兩個(gè)比較郁悶的問題,估計(jì)新學(xué)者很容易遇到,和大家分享一下,避免出現(xiàn)類似的問題。
1、 No request handling method with name 'insert' in class? "ClassName",頁(yè)面顯示為404錯(cuò)誤
這個(gè)問題出現(xiàn)在使用多操作控制器情況下,相關(guān)的操作方法中對(duì)應(yīng)的方法參數(shù)前兩位必須是request,response對(duì)象,必須要有,否則會(huì)報(bào)如上異常。
2、這個(gè)問題困惑了我半天,在網(wǎng)上也有類似的問題,但沒有正確解決方法,異常如下:
javax.servlet.ServletException: ModelAndView [ModelAndView: materialized View is [null]
這個(gè)問題可能出現(xiàn)的場(chǎng)景很多,我所描述的只是其中之一,沒有相關(guān)解決方法,只有查看相關(guān)源代碼,開源就是有這個(gè)好處。
異常拋出代碼為:
??????? at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:924)
查看了相關(guān)源代碼,一層一層看下去
首先在ModelAndView 類實(shí)例是在DispatcherServlet類中的doDispatch方法中創(chuàng)建的,
再跟蹤doDispatch方法中相關(guān)代碼行



ha是一個(gè)接口實(shí)現(xiàn)類,在該場(chǎng)景下,對(duì)應(yīng)的接口實(shí)現(xiàn)類為:
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
SimpleControllerHandlerAdapter類中對(duì)應(yīng)的實(shí)現(xiàn)代碼為:

調(diào)用的是對(duì)應(yīng)的Controller接口中方法,當(dāng)前Controller對(duì)應(yīng)的接口實(shí)現(xiàn)類為我們配置的自定義控制類,一般繼承于org.springframework.web.servlet.mvc.SimpleFormController;一層一層再跟蹤發(fā)現(xiàn):
SimpleFormController繼層于同包AbstractFormController類,而
AbstractFormController繼承于同包AbstractController類,對(duì)應(yīng)的
handleRequest(request,response)在AbstractController類中實(shí)現(xiàn),最終調(diào)用代碼如下:

handleRequest方法為一個(gè)抽象方法,在AbstractFormController類中實(shí)現(xiàn),終于找到原因了,呵呵






































原因?qū)嶋H很簡(jiǎn)單,就因?yàn)槲以谝峤坏谋韱沃袥]有采用post方法,呵呵
而isFormSubmission(request)就是根據(jù)此項(xiàng)判斷,所以其實(shí)際執(zhí)行的代碼為:
return showNewForm(request, response);
而我在對(duì)應(yīng)的配置屬性中沒有配置對(duì)應(yīng)屬性 formView值,因?yàn)槲冶緛砭筒皇且宫F(xiàn)一個(gè)新表單。
故最后返回的ModelAndView為空。
問題都解決了,只是沒想到對(duì)提交表單這么嚴(yán)格,其他web框架是沒有這種限制,不過也沒多大關(guān)系,在實(shí)際開發(fā)中我們大都是采用post方式提交表單的。