ПИА/JSF

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Java Server Faces је део градива који се обрађује током прве половине предмета. Водич испод је намењен да помогне студентима који вежбају за колоквијум, како би успешно поставили све алате, пронашли узрок неких грешки, и тако даље.

Поставка

Слично као на Информационим системима 1, у овом делу градива се ради са Jakarta EE технологијом, унутар NetBeans развојног окружења. На страници предмета постоји упутство за поставку алата, које се делом репродукује овде са одређеним додацима, али у зависности од године и ажурности овог водича може бити новији од препорука које се помињу овде.

Кораци како бисте поставили све алате су:

  1. Преузети и инсталирати JDK 11.0.6 за ваш оперативни систем, коришћењем инсталера
  2. Преузети и инсталирати NetBeans 14 развојно окружење за ваш оперативни систем, коришћењем инсталера, и током инсталације изабрати претходно инсталирани JDK
    Као на ИС1, не инсталирајте NetBeans у директоријум са размаком у путањи. Уколико га инсталирате у Program Files директоријум, реинсталирајте га.
  3. Унутар NetBeans, у левој траци, под Services табом, након десног клика на Servers опцију изабрати Add Server, као тип сервера одабрати GlassFish Server, одабрати верзију 6.2.1, променити путању за инсталацију уколико је потребно, сагласити се са условима коришћења и преузети GlassFish Server, затим завршити поставку сервера са подразумеваним опцијама

При прављењу пројекта, потребно је:

  1. Изабрати опцију за прављење новог пројекта, а унутар ње Web Application под Java with Maven категоријом
  2. Изабрати претходно постављени GlassFish Server као и Jakarta EE 9 Web
  3. Након прављења пројекта, у web.xml фајл, унутар <web-app> је потребно додати следеће:
    <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. Након прављења JSF странице, у <html> је неопходно додати xmlns:h="http://xmlns.jcp.org/jsf/html", како би JSF тагови типа <h:tag> радили, а затим додати h: префикс у <head> и <body>
    Уколико користите тагове типа <f:tag>, NetBeans би требало да вам аутоматски предлаже те тагове и чим искористите предлог ће увести одговарајући XML именски простор

Алтернативно, преузмите поставку пројекта са странице предмета и користите њу уместо да правите пројекат испочетка.

Миграција са Java EE 8

На предмету се до школске 2022/2023. године радило на Java EE 8 платформи, кад се прешло на Jakarta EE 11. Због овога, снимци вежби из тог периода се могу мало разликовати од тренутне процедуре, углавном по процедури прављења пројекта описаној изнад.

Поред броја, постоји пар разлика између рада са ове две верзије:

  • GlassFish Server верзија 6.2.1 не ради са JDK 8
  • javax пакет је преименован у jakarta
  • @FacesConfig анотација више није неопходна изнад bean-ова
  • Валидационе поруке се неће приказивати уколико не додате <h:messages></h:messages> у форму.
  • Механизам са messages.properties и faces-config.xml ради на другачији начин, или не ради уопште. Свакако, овај механизам није неопходан за колоквијум.
  • Предлози у вези са Java кодом унутар JSF фајлова више не раде. Препоручује се краће именовање bean-ова унутар @Named анотација.

Не препоручује се мењање верзије у постојећем Java EE 8 пројекту, већ прављење новог пројекта, копирање фајлова у њега и затим ажурирање на начин поменут изнад.

Честе грешке

  • Као правило, уколико имате неку чудну грешку, пробајте прво са Clean and Build пројекта.
  • Уколико NetBeans не приказује сугестије за тагове у JSF фајловима, проверите да ли сте поставили xmlns:h атрибут како је горе описано.
  • Када правите managed bean, NetBeans подразумевано изгенерише код који увози javax пакет, и потребно је променити га на jakarta пакет.
  • Уколико грешка помиње како org.glassfish.exousia.modules.locked.SimplePolicyConfiguration класа не постоји, прво проверите да ли сте добро написали тагове у web.xml. Шансе су, такође, да вам се покреће стари GlassFish сервер. Покушајте да зауставите GlassFish сервер кроз Services таб, затим обришите све старе GlassFish Server инсталације и покрените сервер опет.
  • Уколико добијате грешку 404 одмах након прављења пројекта, проверите да ли сте добро ископирали садржај који је потребно да стоји у web.xml фајлу.
  • Уколико вам се промене у CSS фајлу не виде на страници после освежавања, пробајте са Ctrl+Shift+R.
  • NullPointerException приликом дохватања конекције ка базу података/извршавања упитом над њом може да укаже на то да нисте додали MySQL Connector/J као библиотеку у пројекат, нисте изменили податке у DB.java, или су ти подаци погрешни.
  • Уколико вам увожење CSS фајлова помоћу <h:outputStylesheet> не ради, проверите да ли вам у документу пише <head> уместо <h:head> као што би требало.
  • Уколико NetBeans и даље распакује индекс Maven централног репозиторијума, претрага пакета приликом додавања MySQL Connector/J неће радити. У том случају, убаците следеће у <dependencies> таг у свом pom.xml фајлу:
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.30</version>
            </dependency>
    
    а затим урадите десни клик на пројекат и покрените Build with Dependencies.
  • Уколико добијете поруку The Java DB location is not set correctly, можете да је игноришете јер не користите Java DB. Ипак, уколико желите да се решите ове поруке, под ServicesDatabases, десним кликом на Java DB а затим Properties можете променити Java DB Installation тако да уместо на неку претходну инсталацију GlassFish Server показује на тренутну.
  • Упозорење како је com.mysql.jdbc.Driver застарело име класе може бити решено тако што у DB.java замените то име са com.mysql.cj.jdbc.Driver, али не би требало да прави друге проблеме.