Spring MVC form:errors using Ajax



我有一个与Spring 3 MVC,Ajax和form:errors相关的问题。

我有一个表单要提交给服务器,并且正在使用Spring MVC。 我已经设置了所有验证,控制器等并且工作正常。 当我提交未通过验证的数据时,我收到错误消息,并按照我的 jsp 中的 form:errors 标记返回并显示在表单上。

我的问题是...

如果我想转换为Ajax方法,我是否仍然可以利用"普通"Spring MVC应用程序的所有基础架构(即,特别是验证器和form:errors功能)将错误返回(并显示在)浏览器上? 我看到了如何提交 Ajax 请求,但我不明白我如何(或是否)仍然可以使用 jsp 的 form:errors 功能。

有谁知道是否可以做到这一点,如果是,请指出我适当的大方向?

提前谢谢。

不能,因为像<form:errors>这样的标签是在服务器端评估的,并在HTTP响应的HTML内容中嵌入错误消息/元素。由于对服务器的 AJAX 请求通常会将 XML 或 JSON 返回给响应(而不是 HTML),然后由客户端 JavaScript 解析,因此 Spring 无法绑定到请求/表单并向内容添加错误消息。

我在Spring提交表单时使用了相当多的AJAX。基本上我所做的是我创建了一个form.jsp文件,然后我从AJAX调用返回该文件。由于 AJAX 将返回包含所有可用表单标记的整个表单,因此我获得了服务器端验证的全部好处。

因此,如果我有一个包含表单的页面,例如,我可以有一个充当表单容器的div

<div id="form-container">
    <form id="myform">
        Normal form here ...
    </form>
</div>

当我提交表单时,我可以加载表单.jsp例如,通过使用 jQuery,

$('#myform').submit(function() {
    $('#form-container').load('ajax/somehandler');
});

因此,您所要做的就是从控制器返回表单.jsp所有正常绑定,就像使用非 AJAX 方法一样。你明白了吗?

不是真的,不是。 form:error 标记在服务器端首次生成页面时发挥其魔力。 如果您没有重新生成页面服务器端,因为您使用了 ajax,则不会运行任何内容。 Errors 对象本身并不是真正可返回的,一直返回到客户端。 我想你可以把它序列化为 JSON,但里面有很多你不需要的东西。 当然,它通常只有代码,而不是实际的消息,并且需要消息源来查找翻译。

最重要的是,您需要手动发送错误,并在返回 ajax 响应时自己在 javascript 中设置错误消息。

最新更新