Ciele
- Aktualizovať závislosti projektu pre prácu so šablónovacím systémom Thymeleaf .
- V rámci štruktúry projektu pripraviť balíky a potrebné súbory pre webové rozhranie.
- Vytvoriť webové používateľské rozhranie.
Úvod
Cieľom tohto cvičenia je vytvoriť webové používateľské rozhranie pre vašu hru s využitím šablónovacieho systému Thymeleaf a vzoru MVC.
Implementácia zahŕňa statické zdroje, dynamické šablóny (Thymeleaf), kontroler grafického herného komponentu (Spring MVC).
Postup
Krok 1
Úloha 1.1
V konfiguračnom súbore pom.xml
pre nástroj Maven doplňte novú závislosť, ktorá umožní prácu so šablónovacím systémom Thymeleaf.
Medzi existujúce závislosti projektu (dependencies
) doplňte nasledovné:
<dependencies>
... //predtým pridané závislosti ponechať nezmenené
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
Poznámka
Pri pridaní závislosti je potrebné aktívne pripojenie na internet, aby sa stiahli potrebné knižnice. V prostredí sa vám môže objaviť notifikácia Maven pre potvrdenie aktualizácie závislostí projektu. Túto aktualizáciu je možné vyvolať aj manuálne cez kontextové menu (po kliknutí pravým tlačidlom myši) Maven -> Reload project alebo cez panel Maven a tlačidlo Reload All Maven Projects.
Krok 2
Pre fungovanie webového rozhrania prostredníctvom šablón Thymeleaf je potrebný kontroler a zdroje, ktoré budú webové rozhranie tvoriť.
Úloha 2.1
Pridajte do projektu adresáre pre zorganizovanie zdrojov, prostredníctvom ktorých bude vytvorené webové rozhranie.
Zdroje pre webové rozhranie, ako sú statické súbory HTML, CSS, obrázky a šablóny pre systém Thymeleaf budú umiestnené v adresári resources
nasledovne:
src
└── main
└── resources
├── static
│ ├── css
│ │ └── *.css
│ ├── images
│ │ ├── *.png
│ │ └── *.svg // obrázky vo formáte .svg alebo .png)
│ └── index.html
├── templates
│ ├── fragments // voliteľný balík pre fragmenty Thymeleaf šablóny)
│ │ └── *.html
│ ├── *.html
└── application.properties
Úloha 2.2
Pridajte do projektu balík, v ktorom bude implementácia kontrolera. V tomto balíku vytvorte triedu kontrolera pre vašu hru.
Kontroler pre šablónu Thymeleaf je samostatná trieda, slúžiaca na spracovanie a správu URL atribútov a URL smerovanie.
Kontrolery budú uložené na strane servera v balíku sk.tuke.gamestudio.server.controller
. Triedu kontrolera nazvite podľa vašej hry, napr. pre kontroler hry Mines to bude MinesController
.
src
└── main
└── java
└── sk.tuke.gamestudio
└── server
└── controller
└── {Nazov}Controller.java
- Triedy kontrolerov sú anotované anotáciami
@Controller
a@Scope(WebApplicationContext.SCOPE_SESSION)
. - Metódy kontrolera sú prostredníctvom anotácie
@RequestMapping
mapované na zodpovedajúce URL adresy. Takýchto metód môže byť v kontroleri viac. - Parametre metódy môžu byť označené anotáciou
@RequestParam
, ktorá slúži na získavanie parametrov URL adresy. Metóda tiež obsahuje parameter typuModel
, reprezentujúci kontext pre pripravovanú šablónu. Do objektu typuModel
môžeme pridať atribúty, ktoré potrebujeme mať v rámci pripravovanej šablóny dostupné. Návratovou hodnotou je názov pohľadu (Thymeleaf šablóny), ktorá sa má zobraziť po spracovaní parametrov.
Príklad metódy s mapovaním na URL môžete vidieť na metóde mines()
kontrolera hry Minesweeper:
@RequestMapping("/mines")
public String mines(@RequestParam(value = "command", required = false) String command,
@RequestParam(value = "row", required = false) String row,
@RequestParam(value = "column", required = false) String column,
Model model) {
// if required, add additional code, e.g. to check provided parameters for null
...
return "mines"; //same name as the template
}
Metóda mines()
sa zavolá pri požiadavke na stránku s relatívnou adresou, uvedenou v anotácii @RequestMapping
. V URL adrese môžu byť dodané aj parametre, vymenované v anotáciách @RequestParam
.
Pri volaní metódy mines()
je spolu s parametrami z URL dodaný aj predpripravený objekt typu Model
. Do tohto modelu môžeme pridať atribúty, ktoré chceme mať dostupné v rámci HTML šablóny pre Thymeleaf a pomôžu nám vytvoriť aktuálny obsah stránky. Šablóna s názvom uvedeným v návratovej hodnote metódy, v tomto prípade "mines"
, sa použije na vygenerovanie HTML stránky, ktorú server poskytne na zobrazenie vo webovom prehliadači.
Krok 3
Úloha 3.1
V adresári templates
vytvorte šablónu systému Thymeleaf, reprezentujúcu grafickú podobu komponentu vašej hry v zobrazení HTML.
Poznámka
Inšpirujte sa príkladom pre hru Minesweeper.
Príklad šablóny pre hru Minesweeper obsahuje nasledovné časti:
- Grafickú reprezentáciu komponentu hry Minesweeper,
<div th:utext="${@minesController.getHtmlField}"/>
- Tlačidlá pre ovládanie hry,
<a href="/mines/new">New game</a><br/>
<a href="/mines/mark" th:text='${@minesController.marking ? "Mark" : "Open"}'/><br/>
- Výpis tabuľky s najlepším skóre, ktorý je možné realizovať viacerými spôsobmi. Môžete si vybrať, ktorý vám najviac vyhovuje, napríklad:
- tabuľka generovaná na serveri pomocou systému Thymeleaf, využívajúc službu JPA,
- tabuľka generovaná na strane klienta pomocou AJAX volania a REST služby,
- tabuľka generovaná na strane klienta pomocou jQuery DataTable a REST služby.
Poznámka
Pri implementácii grafickej podoby herného komponentu sa môžete inšpirovať projektom GameStudio z prednášky. Inšpiráciu môžete čerpať aj z alternatívnej implementácie projektu, ktorá na vyskladanie webového rozhrania využíva Thymeleaf prvky a štýlovanie cez CSS.
Úloha 3.2
Implementujte zobrazenie pre zvyšné služby:
- zoznam komentárov v tabuľke,
- formulár pre zaslanie hráčovho komentára k hre,
- zobrazenie priemerného hodnotenia hry (ako čísla),
- zobrazenie hráčovho hodnotenia hry,
- formulár alebo tlačidlá (hviezdičky) pre zaslanie resp. aktualizovanie hráčovho hodnotenia hry.
Využite pri tom (aj v rámci ďalších krokov) služby implementované na minulých cvičeniach pomocou JPA, prípadne REST. S ohľadom na implementáciu vášho projektu doplňte potrebný kód a zabezpečte, aby boli služby v hre dostupné hráčovi.
Úloha 3.3
Spustite projekt servera a otvorte v prehliadači hru prostredníctvom URL http://localhost:8080
. Otestujte funkcionalitu vašej hry.
Overte si fungovanie všetkých servisných služieb a správnosť pridávaných a zobrazovaných záznamov týchto služieb.
Krok 4
Úloha 4.1
Nahrajte vašu implementáciu do vášho repozitára na GitLab-e. Projekt môžete ďalej priebežne aktualizovať. Pred ďalším cvičením sa uistite, že máte v repozitári vaše aktuálne súbory. Zároveň si pripravte otázky, ktoré by ste na cvičení chceli vyriešiť.
Zdroje
- Projekt GameStudio (GitLab) z prednášok
- Alternatívny projekt GameStudio s využitím Thymeleaf prvkov a CSS
- Dokumentácia šablónovacieho systému Thymeleaf
- Working with Fragments in Thymeleaf
- Thymeleaf Page Layouts
- CSS Flexbox hravou formou: Flexbox Froggy
- Systematický prístup k pomenovaniu CSS identifikátorov BEM Naming
- jQuery Datatables For Beginnerts
- JS Array Data Source