Qual è il modo migliore per eseguire la convalida del modulo sul lato client utilizzando Javascript (con duplicazione del codice minima) quando si utilizza la convalida del bean JSR 303 sul lato server? Attualmente sto utilizzando lo Spring 3 e lo Hibernate Validator.Convalida del bean JSR 303 + Convalida lato client JavaScript
risposta
Ti suggerisco di dare un'occhiata a Spring JS, che fa molto affidamento su Dojo. Un tutorial può essere trovato here.
modo più semplice per voi stessi per iniziare a giocare con esso è quello di scaricare Spring Roo, creare l'applicazione di esempio petclinic con uno degli esempi-scripts (questo si vogliono 5 minuti) e poi giocare con come il javascript è integrato. Spring Roo crea un'applicazione con lo stesso stack tecnologico che usi (Spring + hibernate + implementazione di jsr 303)
Ho trovato questo progetto open source ma sembra morto, forse vale la pena resuscitare.
http://kenai.com/projects/jsr303js/pages/Home
Questa libreria fornisce client convalida lato di un modulo HTML sulla base di JSR-303 e Hibernate Validator annotazioni, integrati con Spring MVC. La libreria fornisce una base di codice di convalida JavaScript che gestisce l'interazione di base con i moduli HTML, nonché le funzioni JavaScript che implementano le annotazioni di convalida supportate da Hibernate Validator (comprese quelle non dalla specifica JSR-303). Questa base di codice JavaScript può essere inclusa in una pagina utilizzando un taglib fornito o estraendo il file JavaScript dal jar e includendolo usando un tag. Una volta che questo codice base è stato incluso in una pagina, viene utilizzato un secondo taglib per generare il codice JavaScript per la convalida di un modulo HTML. È inoltre possibile fornire un oggetto JSON nel corpo del tag per specificare ulteriori informazioni di configurazione.
assolutamente intenzione di testare questo. L'impostazione della convalida sul bean e la sua replica automatica sul client è la strada da percorrere – Erich
Richfaces supporta questo. Hanno un small demo on their site.
Ecco come lo sto facendo con Spring MVC + JQuery + Bootstrap, in parte sulla base di 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>
Si potrebbe usare un po 'di refactoring, ma questo farà un ajax ottenere con i dati del modulo e aggiornare la pagina in base al risultato.
Il framework di convalida lato client PrimeFaces supporta la convalida del bean.
- 1. JSR 303 Convalida Override
- 2. JSF 2.0: come saltare la convalida del bean JSR-303?
- 3. Spring MVC e JSR-303 hibernate convalida convalida
- 4. posso ignorare un JSR-303 convalida annotazione
- 5. JSR 303 - javax.validation - Convalida una data
- 6. kotlin data class + validazione bean jsr 303
- 7. Convalida lato client Grails
- 8. Play framework 2 Convalida convalida lato client
- 9. asp.net convalida lato client mvc
- 10. Convalida lato client con WebApi
- 11. JSR-303 Bean Validation per i campi enum
- 12. Convalida del bean Convalida VS JSF
- 13. Esiste un modo standard per abilitare la convalida del bean JSR 303 usando gli argomenti del metodo annotato
- 14. RegisterOnSubmitStatement dopo la convalida sul lato client
- 15. MVC3 Convalida lato client non funzionante
- 16. Servizio Inject in ConstraintValidator [Bean Validator - JSR 303] Primavera
- 17. JSR 303 Vincolo personalizzato Override
- 18. ASP.Net MVC 3 Modello JSON Convalida del modello lato server e binding con convalida lato client
- 19. E 'possibile avere la convalida lato client senza Javascript
- 20. MVC3 Convalida lato client erratica/incoerente
- 21. convalida fluida con il lato client
- 22. Come posso supportare la convalida JSR-303 e Jackson JSON mappando insieme in modo efficace?
- 23. ASP.NET lato server di convalida
- 24. MVC3 convalida del client non funziona
- 25. Iniezione di dipendenza in JSR-303 Convalida vincoli con molla fallita
- 26. Validazione dei parametri del metodo con JSR-303
- 27. Replica convalida lato server C# in Javascript
- 28. Perché la convalida lato client rappresenta un rischio per la sicurezza rispetto alla convalida lato server?
- 29. JSR 303: Come convalidare una raccolta di oggetti annotati?
- 30. API di convalida Bean
+1 bel tutorial grazie – stacker