0

我正在开发一个 Spring MVC 3.1 Web 应用程序,几乎我所有的表单提交都是使用 jQuery ajax 调用和表单序列化完成的。这很好用。我需要一种从服务器拉回验证错误消息的方法,所以我找了一个例子。我在网上找到了一个,它基本上将 BindingResult 对象放入自定义 JsonResponse 对象中,然后将其作为@ResponseBody. 这也很好用!这是我们遇到问题的地方,虽然BindingResult对象回来了,但没有任何消息像我使用 Spring:form 标签时那样被插值。我调查了这个问题,发现我可以尝试SpringMessageSourceInterpolater用自定义的覆盖,这有帮助,但现在只插入 JSR-303 验证错误,而不是实际的TypeMismatch来自 Spring 绑定的错误。这是我正在做的一个例子:

     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错误对象的字段是一个插值消息,但如果错误是 Spring TypeMismatch(就像放入1一个字段我绑定到一个日期) ,我反而得到了一条长长的 Spring 生成消息。我尝试添加error.getCodes()与对象上的所有内容相对应的消息代码,但无济于事(例如TypeMismatch.fieldname)。肯定有人使用过 Spring 和 Ajax 并进行了此验证,但我找不到答案。

4

1 回答 1

1

我正在经历一个类似的问题,即使用 jQuery 发布表单。目前我只是从控制器返回绑定结果作为字符串,使用:

return bindingResult.getAllErrors()

作为开发应用程序时的临时解决方案,我正在解析返回的 json 数据并在警报弹出窗口中简单地显示 defaultMessage(s)。

您是否设法以某种方式将返回的 json defaultmessage(s) 与关联的表单输入元素相关联?

真的很想知道你是如何处理这个(详细)的,因为关于这个的文档并不多,无论是从春季还是其他地方。

于 2012-06-23T20:31:49.377 回答