Få tilgang til Spring MVC Model Objects i JavaScript
1. Oversikt
I denne veiledningen skal vi vise hvordan du får tilgang til Spring MVC-objekter i Thymeleaf-visninger som inneholder JavaScript-kode. Vi bruker Spring Boot og Thymeleaf malmotoren i eksemplene våre, men ideen fungerer også for andre malmotorer.
Vi skal beskrive to tilfeller: når JavaScript-kode er innebygd eller intern på websiden som genereres av motoren, og når den er ekstern til siden - for eksempel i en separat JavaScript-fil.
2. Oppsett
La oss anta at vi allerede har konfigurert et Spring Boot-nettprogram som bruker Thymeleaf malmotor. Ellers kan du finne disse veiledningene nyttige å starte:
- Bootstrap a Simple Application - om hvordan du oppretter en Spring Boot-applikasjon fra bunnen av
- Spring MVC + Thymeleaf 3.0: Nye funksjoner - om hvordan du bruker Thymeleaf-syntaks
Videre, la oss anta at applikasjonen vår har en kontroller som tilsvarer et endepunkt / indeks som gjengir en visning fra en mal som heter index.html. Denne malen kan inneholde en innebygd eller en ekstern JavaScript-kode, si script.js.
Målet vårt er å kunne få tilgang til Spring MVC-parametere fra enten innebygd eller ekstern JavaScript-kode (JS).
3. Få tilgang til parameterne
Først og fremst må vi lage modellvariablene som vi vil bruke fra JS-koden.
I vår MVC er det forskjellige måter å gjøre dette på. La oss bruke ModelAndView nærme seg:
@RequestMapping ("/ index") offentlig ModelAndView thymeleafView (Kartmodell) {model.put ("nummer", 1234); model.put ("melding", "Hello from Spring MVC"); returner ny ModelAndView ("thymeleaf / index"); }
Vi kan finne andre muligheter i veiledningen vår Modell, ModelMap, og ModelView i vår MVC.
4. Innebygd JS-kode
Innebygd JS-kode er bare en del av index.html filen som ligger inne i element. Vi kan sende Spring MVC-variabler der ganske enkelt:
var number = [[$ {number}]]; var message = "[[$ {message}]]";
Thymeleaf malmotor erstatter hvert uttrykk med en verdi som er tilgjengelig i omfanget av den nåværende kjøringen. Dette betyr at malmotoren forvandler koden nevnt ovenfor til følgende HTML-kode:
var nummer = 1234; var message = "Hei fra våren MVC!";
5. Ekstern JS-kode
La oss si at vår eksterne JS-kode er inkludert i index.html fil ved hjelp av det samme , der vi spesifiserer src Egenskap:
Nå, hvis vi vil bruke Spring MVC-parametrene fra script.js, vi burde:
- definere JS-variabler i innebygd JS-kode som vi gjorde i forrige avsnitt
- få tilgang til disse variablene fra script.js fil
Merk at den eksterne JS-koden skal påkalles etter initialiseringen av variablene til den innebygde JS-koden.
Dette kan oppnås på to måter: ved å spesifisere rekkefølgen på en JS-kodeutførelse eller ved å bruke en asynkron JS-kodeutførelse.
5.1. Spesifiser rekkefølgen for utførelsen
Vi kan gjøre dette ved å erklære den eksterne JS-koden etter den innebygde i index.html:
var number = [[$ {number}]]; var message = "[[$ {message}]]";
5.2. Asynkron kodeutførelse
I dette tilfellet er rekkefølgen vi erklærer den eksterne og innebygde JS-koden i index.html er ikke viktig, men vi bør plassere koden fra script.js inn i en typisk innpakning på siden:
window.onload = funksjon () {// JS-kode};
Til tross for enkelheten i denne koden, er den vanligste fremgangsmåten å bruke jQuery i stedet. Vi inkluderer dette biblioteket som det første element i index.html fil:
... ...
Nå kan vi plassere JS-koden i det følgende jQuery innpakning:
$ (funksjon () {// JS-kode});
Med denne innpakningen kan vi garantere at JS-koden bare kjøres når hele sideinnholdet, og dermed all annen innebygd JS-kode, er fullstendig lastet.
6. Litt forklaring
I vår MVC analyserer Thymeleaf malmotoren bare malfilen (index.html i vårt tilfelle) og konverterer den til en HTML-fil. Denne filen kan i sin tur inneholde referanser til andre ressurser som er utenfor omfanget av malmotoren. Det er brukerens nettleser som analyserer ressursene og gjengir HTML-visningen.
Derfor blir disse ressursene ikke analysert av malmotoren, og vi kan bare injisere variabler definert i kontrolleren i den innebygde JS-koden som deretter blir tilgjengelig for den eksterne JS-koden.
7. Konklusjon
I denne veiledningen har vi lært hvordan vi får tilgang til Spring MVC-parametere i en JavaScript-kode.
Som alltid er de komplette kodeeksemplene i GitHub-depotet vårt.