2016-01-13 13 views
0

Spring mvc + jsp的web项目,用eclispe jetty插件来运行它,刚才遇到一个很奇怪的现象。为什么不能仅仅在spring的mvc控制器中返回模型jquery的post请求

突然在Eclipse控制台,我看到下面的错误消息

SEVERE: PWC6117: File "...foo%2Fsave.jsp" not found 

起初让我感到很困惑,那么我想这些方式来解决这个问题,例如干净的项目,重新启动eclipse等,但仍然存在这个错误。

最后,我记得我已经修改控制器代码,起初代码

@ResponseBody 
public Object save(FooDTO fooDTO, Model model, RedirectAttributes redirectAttributes) { 
    if (!beanValidator(model, fooDTO)){ 
     return "foo"; 
    } 
} 

,但如果有效的失败,页面不能有任何的消息显示,

function(data,status){   
    top.$.jBox.tip(data.message, 'info', { }); 
    window.location = "${ctx}/foo/queryById?fooId=${foo.fooId}"; 
}); 

因为数据只是foo字符串,所以data.message是undefined

时有效的失败,将会把消息转换成模型,

model.addAttribute("message", sb.toString()); 

所以我上面的控制器代码更改

if (!beanValidator(model, fooDTO)){ 
    return model; 
} 

,这只是回归模型,我认为,如果这样做了页面可以显示错误消息,例如参数必须> = 1。

但它没有,它有上述错误。

SEVERE: PWC6117: File "...foo%2Fsave.jsp" not found 

那么为什么return model可能会导致此错误。

然后,我在这种情况下,一切都很好试图返回另一个对象,

return new ResponseDTO(model.asMap().get("message").toString()); 

所以两者都返回一个对象,为什么不能只返回model

回答

0

因为如果收益模型,然后将得到一个特殊的HandlerMethodReturnValueHandler - org.springframework.web.method.annotation.ModelMethodProcessor,但如果返回的其他自定义对象,然后会得到一个名为HandlerMethodReturnValueHandlerorg.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor,在这种情况下the response has been fully handled and view resolution is not required。请参阅源代码void org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception

相关问题