Alternative la jsp1

De atunci, mașinile au evoluat mult. În plus față de varietatea amețitor de stiluri de caroserie, am avut, de asemenea, posibilitatea de a alege modelul radiopriemni- ka / CD-player, pentru a comanda instalarea de sticlă electrice - ascensoare și dispozitive de închidere a ușilor, precum și o cârpă sau tapițerie din piele. Și în timpul nostru cineva poate cumpăra o mașină de orice culoare, inclusiv negru.

Până acum, am folosit tehnologia JSP pentru a crea vizualizări pentru o aplicație. Dar, spre deosebire de vopseaua neagră a lui Henry Ford, JSP nu este singura tehnologie de prezentare disponibilă pentru selecție. Două alte mecanisme de șablon populare sunt Velocity și FreeMarker. Să vedem cum să folosim aceste mecanisme împreună cu cadrul MVC de primăvară.

Folosind șabloane de viteză

Velocity este un limbaj de șabloane ușor de utilizat pentru aplicațiile din Java. Șabloanele de viteză nu conțin cod Java. care facilitează înțelegerea lor nu numai de dezvoltatori, dar și de non-dezvoltatori. Citat din manualul de utilizare Velocity:

"Viteza separă codul Java de paginile web, făcând site-ul mai ușor de întreținut pentru o lungă perioadă de timp și oferind o alternativă viabilă la tehnologia JavaServer Pages".

După JSP, Velocity este probabil cea mai populară limbă de șablon pentru aplicațiile web bazate pe Java. Prin urmare, este foarte posibil să doriți să dezvoltați o aplicație de primăvară utilizând Velocity ca o tehnologie pentru implementarea nivelului de prezentare. Din fericire, Spring susține viteza ca limbă de șabloane la nivel de prezentare pentru MVC de primăvară.

Să vedem cum să folosim Velocity cu MVC de primăvară, implementând nivelul de vizualizare al aplicației RoadRantz bazată pe Velocity.

Definiția reprezentării prin mijloace Velocity

Să presupunem că, ca o tehnologie de implementare a performanței, ați decis să utilizați Velocity în loc de JSP. Un exemplu de implementare a unei pagini JSP de acasă a fost deja prezentat mai sus. Și acum uită-te la Velocity - home.vm (prezentat la 8.15), care este folosit pentru a afișa pagina de start.

Listing 8.15. Implementarea unei pagini de pornire bazate pe Velocity

Adăugați rant

Înregistrați un nou autovehicul

#foreach ($ rant în $ rants)

Șabloanele Velocity și JSP nu au multe diferențe. Dar există un lucru care vă atrage imediat ochiul: lipsa etichetelor șablonului. Acest lucru se datorează faptului că mecanismul Velocity nu se bazează pe utilizarea de etichete, cum ar fi JSP. În schimb, utilizează propria sa limbă, cunoscută sub denumirea de Velocity Template Language (VTL), care conține instrucțiuni de control al fluxului și alte directive.

Directiva #foreach din fișierul home.vm este folosită pentru a organiza o buclă prin lista de elemente, afișând proprietățile elementului următor în fiecare iterație.

În ciuda acestei diferențe, expresiile de limbaj de viteză seamănă în multe feluri cu limba JSP. De fapt, JSP pur și simplu a urmat tocurile Velocity, folosind notația $<> în expresiile propriei limbi.

Acum, după crearea șablonului, trebuie să configurați Spring pentru a utiliza șabloanele Velocity ca vizualizare într-o aplicație bazată pe MVC de primăvară.

Setarea mecanismului de viteză

Mai întâi, ar trebui să configurați mecanismul Velocity în sine. Pentru a face acest lucru, declarați componenta VelocityConfigurer în fișierul de configurare de primăvară, după cum se arată mai jos:

Componenta VelocityConfigurer este responsabilă pentru setarea mecanismului Velocity în primăvară. Proprietatea resourceLoaderPath definește locația căutării șabloanelor. Vă recomandăm să introduceți șabloane într-un director din directorul WEB-INF, astfel încât șabloanele să nu poată fi accesate direct.

Familiarizat cu Velocity deja știu că setările comportamentului de viteză pot fi definite în fișierul velocity.properties. Cu toate acestea, puteți defini aceleași setări cu VelocityConfigurer în proprietatea velocityProperties. De exemplu, aruncați o privire la următorul anunț al componentei VelocityConfigurer:

Activarea vizualizărilor de viteză

Ultimul lucru care trebuie făcut înainte de a utiliza șabloanele de prezentare Velocity este de a configura arbitrul de vizualizare. În special, declarați componenta VelocityViewResolver în fișierul de configurare context, după cum se arată mai jos:

Componenta VelocityViewResolver pentru Velocity este aproape aceeași cu cea a InternalResourceViewResolver pentru JSP. Ca InternalResourceViewResolver, are proprietăți de prefix și sufix, care, împreună cu logica ime- în acestea reprezentările sunt utilizate pentru formarea căii spre shablo- bine. În acest caz, este suficient să setați numai proprietatea sufixului, specificând extensia .vm din ea. Nu este necesar un prefix, deoarece calea către directorul șablon a fost deja specificată în proprietatea resourceLoaderPath a componentei VelocityConfigurer.

Notă. Aici, atributul id al componentei este setat la valoarea ViewResolver. Această circumstanță joacă un rol important atunci când servletul DispatcherServlet nu este configurat să caute toți arbitrii de vizualizare. Dacă aveți nevoie să utilizați mai mulți arbitri de reprezentări în aplicație, va trebui probabil să modificați valoarea atributului id la ceva mai potrivit (și unic), cum ar fi velocityViewResolver.

Aplicația este pregătită să afișeze vizualizările pe baza șabloanelor de viteză. Pentru a face acest lucru, returnați pur și simplu obiectul ModelAndView care face trimitere la vizualizare prin numele său logic. În cazul HomeController, nu trebuie să faceți nimic, deoarece returnează deja un obiect ModelAndView:

returnați noul modelAndView ("home", "rants", recentRants);

Vederea are un nume logic acasă. Când numele vizualizării este definit, extensia .vm va fi adăugată la domiciliu pentru a construi numele fișierului template home.vm. Componenta Velocity-ViewResolver va găsi acest model în WEB-INF / viteza / calea.

În ceea ce privește obiectul modelului rants, acesta va fi disponibil în șablon ca proprietate Velocity. În lista 8.15, acest obiect reprezintă o colecție în care directiva #foreach efectuează iterații.

Formatarea datelor și numerelor

În ciuda faptului că aplicația este deja pregătită să afișeze vizualizarea Velocity, există încă câteva probleme nerezolvate. Dacă examinăm șablonul home.vm (Listarea 8,15), poate fi remarcat faptul că, în home.vm fără formatare a datelor, astfel încât ar fi de dorit să se stabilească câțiva parametri și, astfel, obe- sinterizat data formatarea adecvată.

Limba VTL nu acceptă direct datele de formatare. Cu toate acestea, Velocity dispune de instrumente pentru formatarea datelor și a numerelor. Pentru a le pune la dispoziție, trebuie să le spuneți arbitrului VelocityViewResolver numele atributelor prin care aceste instrumente vor fi exportate. Numele de atribute sunt definite prin proprietățile dateToolAttribute și numberToolAttribute ale componentei VelocityViewResolver:

Specifică faptul că instrumentul de formatare a datei va fi disponibil în șablon ca $ dateTool. Adică, pentru a formata data, este suficient să transferăm funcția în formatul instrumentului. De exemplu:

Primul parametru este șirul șablonului. Aceasta utilizează aceeași sintaxă ca și în java .text.SimpleDateFormat. În plus, puteți specifica unul dintre șabloanele java .text.DateFormat standard prin trecerea uneia dintre valori ca șir de șabloane: FULL, LONG, MEDIUM, SHORT sau DEFAULT. Valoarea FULL corespunzătoare formatului de reprezentare completă a datei a fost utilizată aici.

Așa cum am menționat deja, atributul $ numberTool reprezintă un instrument pentru formatarea numerelor în șablonul Velocity. Pentru mai multe informații despre acest instrument și despre instrumentul de formatare a datei, consultați documentația Velocity.

Exportarea solicitărilor și a atributelor sesiunii

Cele mai multe dintre datele care urmează să fie afișate în sânul shab- Velocity, poate trece prin reprezentarea Harta obiect, Ko Tory ModelAndView transferat obiect, dar, uneori, ar putea necesita atribut afișarea valorilor obiectelor servlet cum ar fi o cerere sau o sesiune. De exemplu, dacă un utilizator se conectează la aplicație, obiectul sesiunii de servlet poate conține informații despre utilizator.

Ar fi foarte incomod dacă am fi forțați să copiem atributele dintr-o interogare sau sesiune în date de model în fiecare controler. Din fericire, VelocityViewResolver poate copia automat atributele modelului. Proprietățile exposeRequestAttributes și exposeSessionAttributes notifică componenta VelocityViewResolver a necesității de a copia atributele solicitare și sesiune la modelul de date. De exemplu:

Tabelul 8.2. MVC de primăvară oferă o colecție de definiții macro Velocity pentru a asocia câmpurile de formă cu un obiect

#springFormTextarea ("rant.rantText" "rows = '5' cols = '50")

Pentru organizarea țării care intră în numele și HO- de înregistrare măsură utilizate macro-uri #springFormInput, asociază câmpurile cu proprietățile și, respectiv, rant.vehicle.plateNumber rant.vehicle.state. Aceasta înseamnă că, atunci când formularul este primit, valorile sunt proprietățile de stare și de număr de proprietate ale proprietății vehiculului obiectului de comandă (rant). În ambele cazuri, nu trebuie să definiți atribute suplimentare în marcajul HTML. astfel că un șir gol este trecut în al doilea parametru. Rezultatul este următorul marcaj HTML cu câmpuri:

stat:

Placă #:

Apoi urmează zona de intrare