10. week

Úloha 7 - Tvoríme webové používateľské rozhranie pre hru

Ciele

  1. Aktualizovať závislosti projektu pre prácu so šablónovacím systémom Thymeleaf .
  2. V rámci štruktúry projektu pripraviť balíky a potrebné súbory pre webové rozhranie.
  3. 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 typu Model, reprezentujúci kontext pre pripravovanú šablónu. Do objektu typu Model 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