在服務器端使用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. JSR-303的驗證
- 4. 使用JSR-303和傳統Bean驗證?
- 5. kotlin數據類+ bean驗證jsr 303
- 6. 使用JSR-303進行Bean驗證
- 7. JSR-303 Bean驗證序列化結果
- 8. 編程Bean驗證(JSR 303)無註釋
- 9. 使用Spring和iBatis JSR-303 bean驗證
- 10. Grails:如何處理JSR 303 bean驗證
- 11. JSR-303 Bean驗證,枚舉領域
- 12. JSR-303 Bean驗證在驗證時更改值
- 13. Spring Form驗證(JSR-303)
- 14. JSR 303 - javax.validation - 驗證日期
- 15. JSR-303的驗證上
- 16. Spring 3驗證(JSR-303)@Min
- 17. JSR 303的驗證覆蓋
- 18. GWT驗證(JSR 303)SampleValidatorFactory
- 19. 當EAR內部沒有觸發Bean驗證(JSR 303)和Hibernate驗證
- 20. JSF 2.0具有Bean驗證(JSR 303)並且它自己的驗證框架
- 21. 春+ JSR 303驗證組被忽略
- 22. 跨字段驗證(JSR 303)的問題
- 23. JSR-303添加默認驗證消息
- 24. 啓用JSR-303註解驗證
- 25. JSR 303在WebSphere上驗證Spring(MVC)
- 26. 嵌套的Jsr 303驗證註釋
- 27. 參數化JSR-303驗證值
- 28. JSR-303驗證與自定義消息
- 29. 未調用自定義JSR 303驗證
- 30. Spring MVC和JSR 303 - 手動驗證
+1尼斯教程感謝 – stacker 2010-05-01 10:02:10