我正在開發Spring MVC 3.1 Web應用程序,並且幾乎所有的表單提交都是使用jQuery ajax調用並形成序列化。這很好。我需要一種方法將驗證錯誤消息從服務器上取回,所以我尋找了一個例子。我發現一個在線基本上將BindingResult對象放入一個自定義的JsonResponse對象中,然後將其作爲@ResponseBody
返回。這也很好!這裏是我們遇到問題的地方,雖然BindingResult
對象返回,但是沒有任何消息被插入,就像我使用Spring:form標籤時一樣。我研究了這個問題,發現我可以嘗試用自定義覆蓋SpringMessageSourceInterpolater
,這有所幫助,但現在只有JSR-303驗證錯誤會內插,而不是來自Spring綁定的實際的TypeMismatch
錯誤。下面是我在做什麼的例子:Spring MVC 3.1和ajax調用的錯誤消息
public @ResponseBody
JSonResponse addQuote(@ModelAttribute("quote") @Valid QuoteBean quote, BindingResult result, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jsonResponse = new JsonResponse();
//Some handle code
jsonResponse.setStatus(JsonResponse.ResponseStatus.INVALID);
jsonResponse.setResult(result.getAllErrors());
return jsonResponse;
}
正如我所說,JSON是完全系列化,併爲JSR-303錯誤,錯誤對象的defaultMessage
場插值的消息,但如果錯誤是一個春天TypeMismatch
(就像把1
放到一個字段中我綁定到一個Date),我最終得到了一個很長的Spring生成的消息。我曾嘗試添加與對象上的所有error.getCodes()
無關的消息代碼(例如TypeMismatch.fieldname
)。當然有人使用Spring和Ajax,並且驗證工作正常,但我找不到答案。
爲了得到字段旁邊的消息,我最終做了類似於Spring的'form'標籤,我在所有字段旁邊添加了新的'div',給了它們一個CSS類的'error'然後添加一個自定義屬性,如'data-field ='username''。然後,由於Spring的bindingResult對象上有一個字段名,所以我的Ajax回調掃描了尋找'$(this).data(response.field)'的'div.error'的表單。同樣,我的問題是使這些'defaultMessage'字段更友好。 – Mark
嗨馬克, 感謝您的領導,我有這樣的想法,但是對這個項目的許多技術(春季mvc/jquery等)是新的,我有一個非常陡峭的學習曲線。你介意分享你的代碼 - 即form/div和ajax回調函數嗎?這真的有幫助。 – Steve
Mark - 我即將編碼 - 如果你能幫忙,你的例子會爲我節省很多痛苦嗎? – Steve