Ú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 autorana 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.
