Úkol z lekce 11
Zobrazení detailu autora
V hodině jsme si vytvořili AutorRepository
a rozběhli metodu findAll()
.
V tomto domácím úkolu doplníme implementace ostatních metod
AutorRepository
a využijeme metodu findById(...)
.
Abyste si nerozbili fungující aplikaci z hodiny,
zkopírujte si projekt z hodiny do složky
WebLekce11/20-Daily_Planet-Jeden_autor
.
Pokud byste neměly z hodiny fungující projekt,
vyjděte z WebLekce11/11-Daily_Planet-Refactor-Solution
a zkopírujte si tento projekt.
Část 1 - Manipulace s autory v databázi
Vyzkoušejte si následující SQL příkazy:
INSERT INTO autor (Autor_ID, KrestniJmeno, Prijmeni, Email, Telefon) VALUES ('bb652abd-8521-0012-a345-ae2562689bc2', 'Jack', 'Sparrow', 'jack.sparrow@blackpearl.com', '+11356004322')
SELECT Autor_ID as id, KrestniJmeno, Prijmeni, Email, Telefon FROM autor WHERE Autor_ID = 'bb652abd-8521-0012-a345-ae2562689bc2'
UPDATE autor SET KrestniJmeno = 'Jackie', Prijmeni = 'Pirate', Email = 'pirate@blackpearl.com', Telefon = '+11356000007' WHERE Autor_ID = 'bb652abd-8521-0012-a345-ae2562689bc2'
DELETE FROM autor WHERE Autor_ID = 'bb652abd-8521-0012-a345-ae2562689bc2'
Po každém příkazu se podívejte do tabulky
autor
a zkontrolujte, co se v ní stalo.
Část 2 - Doplnění implementace metod v AutorRepository
Po tom, co jste ověřili funkčnost příkazů SQL,
je zabudujte do Javy do třídy AutorRepository
.
Místo konkrétních hodnot vždy napište otazník,
protože JdbcTemplate
místo něj bude vkládat konkrétní hodnotu.
Například INSERT
tedy bude vypadat správně takto:
INSERT INTO autor (Autor_ID, KrestniJmeno, Prijmeni, Email, Telefon) VALUES (?, ?, ?, ?, ?)
Nyní tedy doplňte správné SQL příkazy do správných metod:
public Autor findById(UUID id) { Autor jedenAutor = pokladacDotazu.queryForObject( "NAHRADTE SPRAVNYM SQL PRIKAZEM S OTAZNIKY", prevodnikTridyAutor, id.toString()); return jedenAutor; } public Autor update(Autor zaznamKUlozeni) { pokladacDotazu.update( "NAHRADTE SPRAVNYM SQL PRIKAZEM S OTAZNIKY", zaznamKUlozeni.getKrestniJmeno(), zaznamKUlozeni.getPrijmeni(), zaznamKUlozeni.getEmail(), zaznamKUlozeni.getTelefon(), zaznamKUlozeni.getId().toString()); return zaznamKUlozeni; } public void remove(UUID id) { pokladacDotazu.update( "NAHRADTE SPRAVNYM SQL PRIKAZEM S OTAZNIKY", id.toString()); } public Autor insert(Autor zaznamKPridani) { pokladacDotazu.update( "NAHRADTE SPRAVNYM SQL PRIKAZEM S OTAZNIKY", zaznamKPridani.getId().toString(), zaznamKPridani.getKrestniJmeno(), zaznamKPridani.getPrijmeni(), zaznamKPridani.getEmail(), zaznamKPridani.getTelefon()); return zaznamKPridani; }
Část 3 - Stránka s detailem autora
Dalším úkolem je adaptovat stránku autor.html
,
kterou si můžete stáhnout z
Java2Web-Ukol11.7z.
Převeďte ji na autor.jsp
a vložte klasicky do /WEB-INF/view
.
Před stránku JSP opět klasicky představte controllerovou metodu,
jejíž hlavička bude vypadat takto:
@RequestMapping(value = "/autor/{autorId:[0-9a-f\\-]{36}}.html", method = RequestMethod.GET) public ModelAndView zobrazAutora(@PathVariable("autorId") UUID id) { // Zde vyrobte ModelAndView a nastavte do nej autora podle predaneho id }
Všimněte si zástupného znaku {autorId:[0-9a-f\\-]{36}}
ve virtuální adrese.
Do controlleru se tedy lze dostat v prohlížeči zadáním
http://localhost/autor/7d92828e-5b8a-43d4-a9ce-7fcf02778950.html
nebo
http://localhost/autor/5d35d75b-892b-4f14-be3c-f8964369d6a2.html
nebo třeba
http://localhost/autor/c705ef4e-5de0-4409-b537-957605df610c.html
Levá část zástupného znaku
{autorId:[0-9a-f\\-]{36}}
říká Springu,
že ze skutečné adresy má být tato část zapamatována pod názvem autorId
.
Zároveň si všimněte vstupního parametru metody zobrazAutora()
,
konkrétně UUID id
.
Tento vstupní parametr je označen anotací @PathVariable("autorId")
,
která Springu říká, aby výše zméněnou část z adresy
(pojmenovanou zástupným znakem autorId
)
vložil do vstupního parametru id
.
Pravá část zástupného znaku {autorId:[0-9a-f\\-]{36}}
za dvojtečkou je nepovinná a určuje regulární výraz,
kterému musí část adresy odpovídat.
Regulární výrazy jsou složitější látka,
nicméně v našem případě stačí vědět, že
výraz v hranatých závorkách určuje interval povolených znaků.
[0-9a-f\-]
tedy povoluje
0
až 9
a a
až f
a ještě pomlčku -
. Hodnota ve složených závorkách
{36}
říká, že se povolené znaky musejí opakovat přesně 36 krát.
Část 4 - Odkaz na detail ze seznamu autorů
Posledním úkolem je do hlavní stránky k seznamu autorů přidat odkazy na detail autora. Do hlavni.jsp tedy přidejte tento sloupeček:
<jstl:forEach var="autor" items="${autori}"> <tr> <td>${autor.krestniJmeno}</td> <td>${autor.prijmeni}</td> <td>${autor.email}</td> <td>${autor.telefon}</td> <td> <jstl:url var="autorLink" value="/autor/${autor.id}.html"/> <a href="${autorLink}" class="button">Detail</a> </td> </tr> </jstl:forEach>
Odevzdávání úkolu
-
Odladěnou webovou aplikaci publikujte do vašeho cloudu pod názvem
/ukol11
. -
Zdrojový projekt zabalte 7-Zipem
a nahrejte také na váš cloud do složky
/ukoly
. -
Snímek obrazovky z prohlížeče vložte do galerie
Úkol z lekce 11 - Detail autora
na Facebooku. Pokud by galerie ještě neexistovala, založte ji prvním snímkem. Ke snímku do popisu napište adresu vaší webové aplikace.