在服务器端使用JSR 303 bean验证时,使用Javascript执行客户端表单验证(最小代码重复)的最佳方式是什么?我目前使用Spring 3和Hibernate Validator。JSR 303 Bean验证+ Javascript客户端验证
回答
我建议你看看Spring JS,它很大程度上依赖于Dojo。教程可以找到here。
自己开始玩的最简单的方法是下载Spring Roo,使用其中一个示例脚本创建petclinic示例应用程序(这需要5分钟),然后演示如何集成javascript。 Spring Roo使用您使用的相同技术堆栈创建应用程序(Spring + Hibernate +实现jsr 303)
我发现了这个开源项目,但它看起来死了,也许值得复活。
http://kenai.com/projects/jsr303js/pages/Home
该库提供基于JSR-303和Hibernate验证注释,与Spring MVC集成HTML表单的客户端验证。该库提供了一个处理与HTML表单基本交互的JavaScript验证代码库,以及实现Hibernate Validator支持的验证注释的JavaScript函数(包括那些不是来自JSR-303规范的)。该JavaScript代码库可以通过使用提供的taglib或通过从jar中提取JavaScript文件并使用标签包含它来包含在页面中。一旦这个代码库被包含在一个页面中,第二个taglib被用来生成验证HTML表单的JavaScript代码。您也可以在标签主体中提供JSON对象来指定其他配置信息。
肯定会对此进行测试。设置bean上的验证并将其自动复制到客户端上即可 – Erich 2013-05-10 15:06:59
Richfaces支持此功能。他们有一个small demo on their site。
以下是我正在做它用Spring MVC + JQuery + Bootstrap,部分基于a recent blog post at SpringSource:
AddressController.java
@RequestMapping(value="/validate")
public @ResponseBody ValidationResponse processForm(Model model, @Valid AddressForm addressForm, BindingResult result) {
ValidationResponse res = new ValidationResponse();
if (result.hasErrors()) {
res.setStatus("FAIL");
for (ObjectError error : result.getAllErrors()) {
if (error instanceof FieldError) {
FieldError fieldError = (FieldError) error;
res.addError(fieldError.getField(), fieldError.getDefaultMessage());
}
}
}
else {
res.setStatus("SUCCESS");
}
return res;
}
AddressForm.java
public class AddressForm {
@NotNull
@Size(min=1, max=50, message="Address 1 is required and cannot be longer than {max} characters")
private String address1;
@Size(max=50, message="Address 2 cannot be longer than {max} characters")
private String address2;
// etc
}
ValidationResponse.java :
public class ValidationResponse {
private String status;
private Map<String,String> errors;
// getters, setters
}
在address.jsp:
<f:form commandName="addressForm">
<div class="control-group">
<label for="address1">Address 1</label>
<div class="controls">
<f:input path="address1" type="text" placeholder="Placeholder Address 1" class="wpa-valid" />
<span class="help-inline"></span>
</div>
</div>
<!-- etc -->
<div class="form-actions">
<button type="submit" class="btn btn-primary">Save</button>
<button type="button" class="btn">Cancel</button>
</div>
</f:form>
<script type="text/javascript">
function collectFormData($fields) {
var data = {};
for (var i = 0; i < $fields.length; i++) {
var item = $($fields[i]);
data[item.attr("id")] = item.val();
}
return data;
}
function clearErrors($fields) {
for (var i = 0; i < $fields.length; i++) {
var item = $($fields[i]);
$("#"+item.attr("id")).parents(".control-group").removeClass("error");
$("#"+item.attr("id")).siblings(".help-inline").html("");
}
}
function markErrors(errors) {
$.each(errors, function(key, val) {
$("#"+key).parents(".control-group").addClass("error");
$("#"+key).siblings(".help-inline").html(val);
});
}
$(document).ready(function() {
var $form = $("form.validate");
$form.bind("submit", function(e) {
var $fields = $form.find(".validate");
clearErrors($fields);
var data = collectFormData($fields);
var validationUrl = "validate";
$.get(validationUrl, data, function(response) {
$("#alert").removeClass();
if (response.status == "FAIL") {
markErrors(response.errors);
$("#alert").addClass("alert alert-error");
$("#alert").html("Correct the errors below and resubmit.");
} else {
$("#alert").addClass("alert alert-success");
$("#alert").html("Success!");
$form.unbind("submit");
$form.submit();
}
}, "json");
e.preventDefault();
return false;
});
});
</script>
它可以使用一些重构,但这将根据结果做一个Ajax和表单数据GET和更新页面。
PrimeFaces客户端验证框架支持Bean验证。
- 1. GWT JSR 303客户端验证
- 2. JSR 303 Bean验证春季
- 3. Grails:如何处理JSR 303 bean验证
- 4. 编程Bean验证(JSR 303)无注释
- 5. JSR-303 Bean验证序列化结果
- 6. kotlin数据类+ bean验证jsr 303
- 7. 使用Spring和iBatis JSR-303 bean验证
- 8. JSR-303 Bean验证在验证时更改值
- 9. GWT验证(JSR 303)SampleValidatorFactory
- 10. JSR 303的验证覆盖
- 11. 当EAR内部没有触发Bean验证(JSR 303)和Hibernate验证
- 12. 春季单元测试JSR-303验证
- 13. 嵌套的Jsr 303验证注释
- 14. JSR-303验证与自定义消息
- 15. 启用JSR-303注解验证
- 16. Spring MVC和JSR 303 - 手动验证
- 17. JSR-303添加默认验证消息
- 18. 使用JSR-303自定义验证
- 19. 弹簧3,JSR-303(豆验证)和验证集合
- 20. jsr-303验证春天mvc应用程序不验证
- 21. 使用JSR-303验证器而不是Spring验证器
- 22. JSF 2.0:如何跳过JSR-303 bean验证?
- 23. JSF 2:Bean验证JSR 303 notnull:返回模型值
- 24. 如何在Facelets中启用JSR-303 bean验证?
- 25. 的JSR 303 Bean验证,扩展ConstraintValidator不能使用CDI
- 26. 用Mockito和Autowiring测试JSR 303 bean验证单元
- 27. JSR 303在java SE或jaxb中的Bean验证
- 28. 流畅验证非空验证与客户端验证在MVC
- 29. 客户端丢失javascript验证
- 30. 客户端JavaScript字段验证
+1尼斯教程感谢 – stacker 2010-05-01 10:02:10