新增springmvc学习类目,下决心好好研究下底层!
今天遇到一个问题,应用首页无法merge vm文件。经过一番debug,最终发现:当control方法的参数包含HttpServletResponse 时(譬如:public void index(Model m, HttpServletRequest request, HttpServletResponse response)),当前respone会结束,而不做vm的merge:
ServletResponseMethodArgumentResolver设置ModelAndViewContainer.requestHandled=true,
使得
ServletInvocableHandlerMethod.invokeAndHandle
在returnValue =null且ModelAndViewContainer.requestHandled=true的直接return,
而在return之后本留给returnValueHandlers.handleReturnValue(包括了merge vm)
ServletInvocableHandlerMethod.invokeAndHandle中关键代码:
写道
if (returnValue == null) {
if (isRequestNotModified(webRequest) || hasResponseStatus() || mavContainer.isRequestHandled()) {
mavContainer.setRequestHandled(true);
return;
}
}
if (isRequestNotModified(webRequest) || hasResponseStatus() || mavContainer.isRequestHandled()) {
mavContainer.setRequestHandled(true);
return;
}
}