使用 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 进行服务器端验证的主要内容,如果未能解决你的问题,请参考以下文章
将 Knockout.js 与最新的 jQuery 文件和 ASP.NET MVC 一起使用
来自前端的 Json 数据未通过后端使用 Knockout 和 MVC 插入到数据库中
使用 Knockout、MVC 和 Kendo 时,在控制器“Web.Controllers.HomeController”上找不到公共操作方法“未定义”