Spring MVC表单:使用Ajax的错误

时间:2011-05-17 18:57:22

标签: java spring spring-mvc java-ee

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

我有一个提交给服务器的表单,我正在使用Spring MVC。我有所有的验证,控制器等设置和工作正常。当我提交未通过验证的数据时,我会收到错误消息,并根据我的表单显示在表单上:我的jsp中的错误标记。

我的问题是......

如果我想转换为Ajax方法,我是否仍然可以利用“普通”Spring MVC应用程序的所有基础结构(即,特别是验证器和表单:错误功能)来将错误恢复到(并显示在浏览器上?我看到如何提交Ajax请求,但我不知道如何(或者如果)我仍然可以使用jsp的表单:错误功能。

有没有人知道是否可以这样做,如果有,请指出适当的总体方向?

提前致谢。

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:6)

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

所以,如果我有一个包含表单的页面,我可以,例如,有一个div作为表单容器

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

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

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

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

答案 2 :(得分:5)

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

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