使用 Spring MVC 和 Knockout JS 进行服务器端验证

Posted

技术标签:

【中文标题】使用 Spring MVC 和 Knockout JS 进行服务器端验证【英文标题】:Server side validation with Spring MVC and Knockout JS 【发布时间】:2014-11-13 16:51:28 【问题描述】:

问题:

我正在寻找一个好的解决方案来验证我在Spring MVC 控制器中的数据并使用Knockout JS 填充错误。我想象与 Spring Tags 中现有的 <form:errors path=""> 类似的东西。 该解决方案应提供以下属性:

    使用 jQuery 和 AJAX 提交表单 使用@ModelAttribute@Valid 进行服务器端验证 错误消息应自动填充到某些“敲除错误标签”

类似的东西已经存在吗?如果这将提供所需的功能,我也愿意切换到另一个 JS 框架。 (Angular、Backbone 等)


我的自定义解决方案:

我将所有错误存储在 Map<String, String> 中,其中键是字段名称,值是错误消息,并在 Knockout 中填充错误。这个解决方案的问题是,KnockoutJS 在验证后会丢失所有未绑定的字段。

验证:

helper.getErrors().put("firstName", messageSourceProvider.getMessage("validation.requiredDefault"));

序列化:

JSONSerializer serializer = new JSONSerializer();
serializer.include("helper");
serializer.include("helper.errors");
String json = serializer.serialize(helper);

淘汰赛:

<!-- ko foreach: errors -->
    <!-- ko if: key === 'firstName' -->
        <span data-bind='text: value' class="spring-error ordinary-tooltip fa fa-lg fa-exclamation-circle"></span> 
    <!-- /ko -->
<!-- /ko -->

【问题讨论】:

您可以将github.com/Knockout-Contrib/Knockout-Validation 与来自后端的错误响应结合起来。 【参考方案1】:

我为处理您的问题而采取的方法是在允许表单提交之前触发 ajax 调用。如果存在验证问题或错误,我会停止提交表单并显示错误。这样绑定仍然完好无损,在用户修复问题后,可以再次重新提交表单数据。

【讨论】:

以上是关于使用 Spring MVC 和 Knockout JS 进行服务器端验证的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC 中使用 Knockout 进行文件上传

将 Knockout.js 与最新的 jQuery 文件和 ASP.NET MVC 一起使用

来自前端的 Json 数据未通过后端使用 Knockout 和 MVC 插入到数据库中

使用 Knockout、MVC 和 Kendo 时,在控制器“Web.Controllers.HomeController”上找不到公共操作方法“未定义”

我是不是有理由使用 Knockout MVC 而不是 Knockout JS?

基于Bootstrap和Knockout.js的ASP.NET MVC开发实战