2012-06-22 15 views
0

我正在開發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,並且驗證工作正常,但我找不到答案。

回答

1

我正在經歷類似的問題,即使用jQuery發佈表單。目前,我只是返回bindingresult從控制器的字符串,使用:

return bindingResult.getAllErrors() 

由於同時開發應用一個臨時的解決方案,我解析返回的JSON數據,而只是顯示在defaultMessage(S)一個警報彈出。

你是否設法以某種方式將返回的json defaultmessage與關聯的表單輸入元素進行關聯?

想知道你是如何處理這個問題的(詳細),因爲從春季或其他方面來看,關於這方面的文檔並不多。

+0

爲了得到字段旁邊的消息,我最終做了類似於Spring的'form'標籤,我在所有字段旁邊添加了新的'div',給了它們一個CSS類的'error'然後添加一個自定義屬性,如'data-field ='username''。然後,由於Spring的bindingResult對象上有一個字段名,所以我的Ajax回調掃描了尋找'$(this).data(response.field)'的'div.error'的表單。同樣,我的問題是使這些'defaultMessage'字段更友好。 – Mark

+0

嗨馬克, 感謝您的領導,我有這樣的想法,但是對這個項目的許多技術(春季mvc/jquery等)是新的,我有一個非常陡峭的學習曲線。你介意分享你的代碼 - 即form/div和ajax回調函數嗎?這真的有幫助。 – Steve

+0

Mark - 我即將編碼 - 如果你能幫忙,你的例子會爲我節省很多痛苦嗎? – Steve