In primavera, dopo la convalida otteniamo un oggetto nello controller
.Spring: Come risolvere un errore di convalida -> codice di errore -> messaggio di errore
Abbastanza semplice, se ricevo errori di convalida, voglio rivedere il mio modulo con il messaggio di errore sopra ogni campo afflitto.
Quindi, per verificare la presenza di errori sul campo sul campo username
della mia FormObject
mi chiamano:
FieldError usernameFieldError = bindingResult.getFieldError("username");
Grande, ora ho in possesso di un oggetto FieldError
che, assumendo sto usando il DefaultMessageCodeResolver
ora contiene qualcosa come 4 errore possibile codici.
Come passare da FieldError
-> Una stringa che è consumabile per l'utente?
Ho un MessageSource
definito nel mio contesto di applicazione web, quindi posso mappare un singolo codice di errore in un messaggio.
Ma a volte il messaggio predefinito sarà il migliore, ea volte mi aspetto che due dei codici di errore possano avere un messaggio rilevante, quindi dobbiamo scegliere quello migliore.
Quale metodo si utilizza per determinare il migliore messaggio di errore possibile da presentare per un errore di campo?
- Devo scrivere qualche algoritmo per passare attraverso tutti i codici di errore e scegliere tra i più specifici?
- Spring fornisce supporto per determinare il messaggio di errore più specifico?
- Questo intero processo sembra così lungo e contorto, pensavo che la primavera avrebbe dovuto rendere questa roba facile. Forse sono totalmente fuori base in qualche modo?
Oooh, vedo, io non prendo MessageSource.get (MessageSoureResolvable, ...), ho appena notato il get (String, ...) le opzioni, questa è la chiave di collegamento (in realtà probabilmente l'ho notato e l'ho perso nella miriade di dettagli in cui ci perdiamo quando impariamo un nuovo framework/api). Grazie!! –
Punto interessante sul taglib JSP, sto usando Velocity, ma Spring offre lo stesso in formato macro. Ma non l'ho ancora impiegato poiché sembrava piuttosto anti-primavera legare anche la mia presentazione alla struttura della primavera. Ho pensato che fosse abbastanza brutto che il mio controller ora chiamasse il MessageSource specifico per la primavera piuttosto che un ResourceBundle standard java.Ma forse lo sto pensando troppo? È la mia prima volta con Spring. –
Abbastanza vero, ma per quanto riguarda le tecnologie di visualizzazione, in genere finirai per accoppiarlo a * qualcosa. * Farai un sacco di reinventare la ruota se tenti di utilizzare solo JSTL e l'API del servlet! WebMVC e WebFlow sono abbastanza non invadenti, e con le librerie di tag è possibile creare facilmente i propri file .tag che li avvolgono e "isolano" la dipendenza in un unico posto che l'implementazione potrebbe successivamente essere modificata. L'uso del tag rimuove anche la dipendenza dall'interfaccia Errori nel tuo oggetto di backup, permettendoti di usare un pojo senza molla. – Affe