PIA/JSF

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Java Server Faces je deo gradiva koji se obrađuje tokom prve polovine predmeta. Vodič ispod je namenjen da pomogne studentima koji vežbaju za kolokvijum, kako bi uspešno postavili sve alate, pronašli uzrok nekih greški, i tako dalje.

Postavka

Slično kao na Informacionim sistemima 1, u ovom delu gradiva se radi sa Jakarta EE tehnologijom, unutar NetBeans razvojnog okruženja. Na stranici predmeta postoji uputstvo za postavku alata, koje se delom reprodukuje ovde sa određenim dodacima, ali u zavisnosti od godine i ažurnosti ovog vodiča može biti noviji od preporuka koje se pominju ovde.

Koraci kako biste postavili sve alate su:

  1. Preuzeti i instalirati JDK 11.0.6 za vaš operativni sistem, korišćenjem instalera
  2. Preuzeti i instalirati NetBeans 14 razvojno okruženje za vaš operativni sistem, korišćenjem instalera, i tokom instalacije izabrati prethodno instalirani JDK
    Kao na IS1, ne instalirajte NetBeans u direktorijum sa razmakom u putanji. Ukoliko ga instalirate u Program Files direktorijum, reinstalirajte ga.
  3. Unutar NetBeans, u levoj traci, pod Services tabom, nakon desnog klika na Servers opciju izabrati Add Server, kao tip servera odabrati GlassFish Server, odabrati verziju 6.2.1, promeniti putanju za instalaciju ukoliko je potrebno, saglasiti se sa uslovima korišćenja i preuzeti GlassFish Server, zatim završiti postavku servera sa podrazumevanim opcijama

Pri pravljenju projekta, potrebno je:

  1. Izabrati opciju za pravljenje novog projekta, a unutar nje Web Application pod Java with Maven kategorijom
  2. Izabrati prethodno postavljeni GlassFish Server kao i Jakarta EE 9 Web
  3. Nakon pravljenja projekta, u web.xml fajl, unutar <web-app> je potrebno dodati sledeće:
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
    
  4. Nakon pravljenja JSF stranice, u <html> je neophodno dodati xmlns:h="http://xmlns.jcp.org/jsf/html", kako bi JSF tagovi tipa <h:tag> radili, a zatim dodati h: prefiks u <head> i <body>
    Ukoliko koristite tagove tipa <f:tag>, NetBeans bi trebalo da vam automatski predlaže te tagove i čim iskoristite predlog će uvesti odgovarajući XML imenski prostor

Alternativno, preuzmite postavku projekta sa stranice predmeta i koristite nju umesto da pravite projekat ispočetka.

Migracija sa Java EE 8

Na predmetu se do školske 2022/2023. godine radilo na Java EE 8 platformi, kad se prešlo na Jakarta EE 11. Zbog ovoga, snimci vežbi iz tog perioda se mogu malo razlikovati od trenutne procedure, uglavnom po proceduri pravljenja projekta opisanoj iznad.

Pored broja, postoji par razlika između rada sa ove dve verzije:

  • GlassFish Server verzija 6.2.1 ne radi sa JDK 8
  • javax paket je preimenovan u jakarta
  • @FacesConfig anotacija više nije neophodna iznad bean-ova
  • Validacione poruke se neće prikazivati ukoliko ne dodate <h:messages></h:messages> u formu.
  • Mehanizam sa messages.properties i faces-config.xml radi na drugačiji način, ili ne radi uopšte. Svakako, ovaj mehanizam nije neophodan za kolokvijum.
  • Predlozi u vezi sa Java kodom unutar JSF fajlova više ne rade. Preporučuje se kraće imenovanje bean-ova unutar @Named anotacija.

Ne preporučuje se menjanje verzije u postojećem Java EE 8 projektu, već pravljenje novog projekta, kopiranje fajlova u njega i zatim ažuriranje na način pomenut iznad.

Česte greške

  • Kao pravilo, ukoliko imate neku čudnu grešku, probajte prvo sa Clean and Build projekta.
  • Ukoliko NetBeans ne prikazuje sugestije za tagove u JSF fajlovima, proverite da li ste postavili xmlns:h atribut kako je gore opisano.
  • Kada pravite managed bean, NetBeans podrazumevano izgeneriše kod koji uvozi javax paket, i potrebno je promeniti ga na jakarta paket.
  • Ukoliko greška pominje kako org.glassfish.exousia.modules.locked.SimplePolicyConfiguration klasa ne postoji, prvo proverite da li ste dobro napisali tagove u web.xml. Šanse su, takođe, da vam se pokreće stari GlassFish server. Pokušajte da zaustavite GlassFish server kroz Services tab, zatim obrišite sve stare GlassFish Server instalacije i pokrenite server opet.
  • Ukoliko dobijate grešku 404 odmah nakon pravljenja projekta, proverite da li ste dobro iskopirali sadržaj koji je potrebno da stoji u web.xml fajlu.
  • Ukoliko vam se promene u CSS fajlu ne vide na stranici posle osvežavanja, probajte sa Ctrl+Shift+R.
  • NullPointerException prilikom dohvatanja konekcije ka bazu podataka/izvršavanja upitom nad njom može da ukaže na to da niste dodali MySQL Connector/J kao biblioteku u projekat, niste izmenili podatke u DB.java, ili su ti podaci pogrešni.
  • Ukoliko vam uvoženje CSS fajlova pomoću <h:outputStylesheet> ne radi, proverite da li vam u dokumentu piše <head> umesto <h:head> kao što bi trebalo.
  • Ukoliko NetBeans i dalje raspakuje indeks Maven centralnog repozitorijuma, pretraga paketa prilikom dodavanja MySQL Connector/J neće raditi. U tom slučaju, ubacite sledeće u <dependencies> tag u svom pom.xml fajlu:
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.30</version>
            </dependency>
    
    a zatim uradite desni klik na projekat i pokrenite Build with Dependencies.
  • Ukoliko dobijete poruku The Java DB location is not set correctly, možete da je ignorišete jer ne koristite Java DB. Ipak, ukoliko želite da se rešite ove poruke, pod ServicesDatabases, desnim klikom na Java DB a zatim Properties možete promeniti Java DB Installation tako da umesto na neku prethodnu instalaciju GlassFish Server pokazuje na trenutnu.
  • Upozorenje kako je com.mysql.jdbc.Driver zastarelo ime klase može biti rešeno tako što u DB.java zamenite to ime sa com.mysql.cj.jdbc.Driver, ali ne bi trebalo da pravi druge probleme.