Vloženo:

Úkol 07 - Informační systém pro seznam kontaktů

Vytvořte jednoduchý informační systém, který bude zobrazovat seznam telefonních a e-mailových kontaktů.

Když se klikne na konkrétní řádek v tabulce, zobrazí se druhá stránka s detailem záznamu, na které bude možné si záznam upravit a uložit zpět.

V hlavním seznamu bude také nepovinně možnost záznam smazat a přidat nový.

Seznam kontaktů

Tabulku kontaktů včetně počtu a významu jednotlivých sloupečků si můžete navrhnout podle svého. Můj návrh vypadá takto:


Číslo Jméno Telefon Email Akce
100 Thomas Alva Edison +1-123-555-666 thomas@edison.com Edit  Smazat
101 Albert Einstein +41 953 203 569 albert.einstein@cern.ch Edit  Smazat
102 Kamil Ševeček +420 604 111 222 kamil.sevecek@czechitas.cz Edit  Smazat

Tabulku kontaktů vystavte na adrese: http://localhost:8080/kontakty/seznam.html

Detail jednoho kontaktu

Odkaz ze souhrnné tabulky bude pro každý záznam jiný. Může vypadat například takto:
http://localhost:8080/kontakty/100.html … pro záznam s ID = 100
http://localhost:8080/kontakty/101.html … pro záznam s ID = 101
http://localhost:8080/kontakty/102.html … pro záznam s ID = 102

Jak udělat metodu zobrazDetail() citlivou na všechny adresy /kontakty/100.html, /kontakty/101.html, …? V lekci jsme si ukazovali @PathVariable.

@RequestMapping(value = "/{cislo:[0-9]+}.html", method = RequestMethod.GET)
public ModelAndView zobrazDetail(@PathVariable("cislo") Long cisloKontaktu) {
    // zobrazit formular
}

Po úspěšném vyplnění / změně kontaktu vracejte ModelAndView s redirectem (přesměrováním), aby prohlížeč přešel zpět na seznam kontaktů.

@RequestMapping(value = "/{cislo:[0-9]+}.html", method = RequestMethod.POST)
public ModelAndView zpracujDetail(@PathVariable("cislo") Long cisloKontaktu, DetailForm vyplnenyFormular) {
    // zpracovat vyplnenyFormular

    return new ModelAndView("redirect:/seznam.html");
}

Pro formulář si připravte třídu DetailForm. Bude mít podobné vlastnosti, jako třída Kontakt, ale používá se na jiné účely, proto mějte obě dvě.

Nezapomeňte, že stránky (templates) musejí v prohlížeči fungovat jak při zobrazení prostého souboru z disku, tak při přístupu přes webový server (se Spring Bootem).

Smazání jednoho kontaktu

Na stránce se seznamem mějte u každého kontaktu akci Smazat. Text bude ve skutečnosti odkaz (<a href="ADRESA">) na metodu ve třídě HlavniController. Může vypadat například takto:
http://localhost:8080/kontakty/100/delete … pro záznam s ID = 100
http://localhost:8080/kontakty/101/delete … pro záznam s ID = 101
http://localhost:8080/kontakty/102/delete … pro záznam s ID = 102

Metoda bude vypadat nějak takto:

@RequestMapping(value = "/{cislo:[0-9]+}/delete")
public ModelAndView zobrazDetail(@PathVariable("cislo") Long cisloKontaktu) {
    // smazat zaznam

    return new ModelAndView("redirect:/seznam.html");
}

Pár tipů

Odevzdání domácího úkolu

Nejprve appku/appky zbavte přeložených spustitelných souborů. Zařídíte to tak, že zastavíte IntelliJ IDEA a smažete podsložku target v projektu. Nesmíte mít IntelliJ IDEA zapnutou, protože projekt má nastaven automatický překlad a hned by se tam zase vytvořila. Následně složku s projektem zabalte pomocí 7-Zipu pod jménem Ukol-CISLO-Vase_Jmeno.7z. (Případně lze použít prostý zip, například na Macu). Takto vytvořený archív nahrajte na Google Drive do Odevzdávárny.

Pokud byste chtěli odevzdat revizi úkolu (např. po opravě), zabalte ji a nahrajte ji na stejný Google Drive znovu, jen tentokrát se jménem Ukol-CISLO-Vase_Jmeno-verze2.7z.

Termín odevzdání je dva dny před další lekcí, nejpozději 23:59. Tedy pokud je další lekce ve čtvrtek, termín je úterý 23:59. Pokud úkol nebo revizi odevzdáte později, prosím pošlete svému opravujícímu kouči/lektorovi email nebo zprávu přes FB.