English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Problema: Quando utilizziamo i valori trasmessi tramite modulo, se definiamo proprietà come name, address, age, ecc., allora i valori trasmessi tramite modulo includono solo questi tre attributi. Tuttavia, abbiamo bisogno dei valori name, pass, address, age, ecc. Quindi, quando inviamo il modulo e assegniamo i valori, possono verificarsi casi in cui i valori non ricevuti sono null. Come illustrato di seguito:
L'password ottenuta è null
Allora dobbiamo risolvere questo problema utilizzando l'annotazione @ModelAttribute:
Ecco un esempio di implementazione del codice:
@ModelAttribute public void getUsers(@RequestParam(value="name",required=false) String name,Map<String, Object> map){ if(name!=null){ System.out.println("Chiamata a ModelAttribute"); //Simulazione dell'oggetto ottenuto dal database. User users = new User("cjh","123","[email protected]","China"); System.out.println("Ottieni un oggetto dal database"+users); map.put("user",users); } } @RequestMapping("/getInfo") public String getServletAPI(User user){ String viewName = "hello"; System.out.println("Modifica: " + user); return viewName; }
Il metodo annotato con @ModelAttribute viene eseguito indipendentemente da quale altro metodo venga chiamato in questo controller.
Il flusso di esecuzione del codice sopra è il seguente:
1. Prima di tutto, viene eseguito il metodo annotato con @ModelAttribute, che ricerca l'oggetto corrispondente nel database, mette i valori nella coppia di chiave valore del map, la chiave dovrebbe essere uguale al nome del parametro del metodo che riceve la richiesta. Ad esempio: se il parametro di input definito è user, allora map.put(“user”, valore (oggetto dalla ricerca del database)). Questo Map deve essere definito nel luogo del parametro del metodo (come nel codice sopra).
2. Spring MVC troverà l'oggetto user nel Map e assegnargli i parametri della richiesta di form, solo le proprietà definite nel form saranno sostituite, quelle non definite saranno null e non saranno modificate. Pertanto, è necessario che il nome della chiave definita nel metodo annotato con @ModelAttribute corrisponda al nome del parametro nel metodo del controller (metodo annotato con @RequestMapping()). Altrimenti, non avrà alcun effetto.
3. Spring MVC inserisce l'oggetto sopra menzionato come parametro del metodo di destinazione.
Attenzione: nei metodi modificati con @ModelAttribute, la chiave inserita nel map deve corrispondere al nome del parametro del tipo di input del metodo di destinazione.
Esempio di effetto finale:
Questo è tutto il contenuto dell'articolo. Spero che il contenuto di questo articolo possa essere di aiuto alla tua apprendimento o lavoro, e spero di ricevere molta supporto per il tutorial URLA.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, di proprietà del rispettivo autore. Il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato modificato manualmente e non assume alcuna responsabilità legale. Se trovi contenuti sospetti di violazione del diritto d'autore, invia un'email a: notice#oldtoolbag.com (al momento dell'invio dell'email, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata la veridicità, questo sito rimuoverà immediatamente il contenuto sospetto di violazione.