Logo Czechitas
Vloženo: 13. 5. 2017

Ú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 09 a af 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

  1. Odladěnou webovou aplikaci publikujte do vašeho cloudu pod názvem /ukol11.
  2. Zdrojový projekt zabalte 7-Zipem a nahrejte také na váš cloud do složky /ukoly.
  3. 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.