<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    beauty_beast

    上善若水 厚德載物

    這兩天在學(xué)習(xí)SpringMVC遇到兩個(gè)比較郁悶的問題,估計(jì)新學(xué)者很容易遇到,和大家分享一下,避免出現(xiàn)類似的問題。
    1、 No request handling method with name 'insert' in class? "ClassName",頁面顯示為404錯(cuò)誤
    這個(gè)問題出現(xiàn)在使用多操作控制器情況下,相關(guān)的操作方法中對應(yīng)的方法參數(shù)前兩位必須是request,response對象,必須要有,否則會報(bào)如上異常。
    2、這個(gè)問題困惑了我半天,在網(wǎng)上也有類似的問題,但沒有正確解決方法,異常如下:
    javax.servlet.ServletException: ModelAndView [ModelAndView: materialized View is [null]
    這個(gè)問題可能出現(xiàn)的場景很多,我所描述的只是其中之一,沒有相關(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)代碼行

    HandlerAdapter?ha? = ?getHandlerAdapter(mappedHandler.getHandler());
    mv?
    = ?ha.handle(processedRequest,?response,?mappedHandler.getHandler());

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

    SimpleControllerHandlerAdapter類中對應(yīng)的實(shí)現(xiàn)代碼為:

    ((Controller)?handler).handleRequest(request,?response)

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

    return ?handleRequestInternal(request,?response)

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

    protected ? final ?ModelAndView?handleRequestInternal(HttpServletRequest?request,?HttpServletResponse?response)
    ????????????
    throws ?Exception? {

    ????????
    // ?Form?submission?or?new?form?to?show?
    ???????? if ?(isFormSubmission(request))? {

    ????????????
    // ?Form?submission:?in?session-form?mode,?we?need?to?find
    ????????????
    // ?the?form?object?in?the?HTTP?session.
    ???????????? if ?(isSessionForm())? {
    ????????????????HttpSession?session?
    = ?request.getSession( false );
    ????????????????
    if ?(session? == ? null ? || ?session.getAttribute(getFormSessionAttributeName(request))? == ? null )? {
    ????????????????????
    // ?Cannot?submit?a?session?form?if?no?form?object?is?in?the?session.
    ???????????????????? return ?handleInvalidSubmit(request,?response);
    ????????????????}

    ????????????}


    ????????????
    // ?Found?form?object?in?HTTP?session:?fetch?form?object,
    ????????????
    // ?bind,?validate,?process?submission.
    ????????????Object?command? = ?getCommand(request);
    ????????????ServletRequestDataBinder?binder?
    = ?bindAndValidate(request,?command);
    ????????????
    return ?processFormSubmission(request,?response,?command,?binder.getErrors());
    ????????}


    ????????
    else ? {
    ????????????
    // ?New?form?to?show:?render?form?view.
    ???????????? return ?showNewForm(request,?response);
    ????????}

    ????}

    原因?qū)嶋H很簡單,就因?yàn)槲以谝峤坏谋韱沃袥]有采用post方法,呵呵
    而isFormSubmission(request)就是根據(jù)此項(xiàng)判斷,所以其實(shí)際執(zhí)行的代碼為:
    return showNewForm(request, response);
    而我在對應(yīng)的配置屬性中沒有配置對應(yīng)屬性 formView值,因?yàn)槲冶緛砭筒皇且宫F(xiàn)一個(gè)新表單。
    故最后返回的ModelAndView為空。

    問題都解決了,只是沒想到對提交表單這么嚴(yán)格,其他web框架是沒有這種限制,不過也沒多大關(guān)系,在實(shí)際開發(fā)中我們大都是采用post方式提交表單的。

    Feedback

    # re: Spring框架學(xué)習(xí)二篇外----在WEBMVC學(xué)習(xí)遇到的問題  回復(fù)  更多評論   

    2006-05-26 14:25 by null
    為啥“沒有配置對應(yīng)屬性 formView值”呢?當(dāng)你新建一個(gè)東西時(shí),不需要“展現(xiàn)一個(gè)新表單”嗎?
    一個(gè)SimpleFormController可以處理一種表單的新建、編輯、修改,并且提供數(shù)據(jù)驗(yàn)證和綁定的功能,我覺得這是SpringMVC最獨(dú)到的地方了;處理表單以外的其他GET請求時(shí),我都用MultiActionController。

    # re: Spring框架學(xué)習(xí)二篇外----在WEBMVC學(xué)習(xí)遇到的問題  回復(fù)  更多評論   

    2006-05-26 15:17 by 柳隨風(fēng)
    呵呵,我明白你的意思,我做的測試頁面是提交數(shù)據(jù)的頁面,不是展現(xiàn)一個(gè)新表單,我實(shí)際上只是想測試數(shù)據(jù)綁定功能。
    謝謝你的指導(dǎo).

    # re: Spring框架學(xué)習(xí)二篇外----在WEBMVC學(xué)習(xí)遇到的問題  回復(fù)  更多評論   

    2006-05-26 20:07 by 潛心
    當(dāng)然了
    spring對表單提交的方法是非常嚴(yán)格的,
    建議把spring的API仔細(xì)研究下,里面講的很清楚
    主站蜘蛛池模板: 亚洲AV无码AV男人的天堂不卡| 7723日本高清完整版免费| 91成人免费福利网站在线| 99久久免费国产精精品| 18观看免费永久视频| 国产精品无码一区二区三区免费| 亚洲精品国产自在久久| 亚洲精品V欧洲精品V日韩精品 | 日韩午夜理论免费TV影院| 国内精品乱码卡1卡2卡3免费| 免费真实播放国产乱子伦| 亚洲国产日韩在线视频| 亚洲国产视频久久| 中文字幕高清免费不卡视频| 无码区日韩特区永久免费系列| 日本中文一区二区三区亚洲| 日韩亚洲AV无码一区二区不卡| 亚洲AV无码国产精品永久一区| 一个人看的www免费视频在线观看| 无码免费午夜福利片在线| 亚洲午夜福利精品久久| 亚洲av日韩av综合| 国产午夜无码片免费| 免费观看的av毛片的网站| 久久久久亚洲AV成人无码| 亚洲av第一网站久章草| 最近的中文字幕大全免费8| 国产成人精品久久亚洲| 亚洲色一区二区三区四区| 久久国产乱子免费精品| 亚洲毛片网址在线观看中文字幕| 狠狠色香婷婷久久亚洲精品| 日韩精品在线免费观看| 免费人妻无码不卡中文字幕18禁| 亚洲性色AV日韩在线观看| 91老湿机福利免费体验| 国产亚洲视频在线播放| 偷自拍亚洲视频在线观看| 成人黄动漫画免费网站视频 | 国产在线观看免费完整版中文版| 亚洲人成人77777在线播放|