Ú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 | 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ů
-
Konstanty typu
Longse zapisují sLna konci. Například123456L. BezLna konci jde o konstantu typuint. -
Doporučuji vytvořit si třídu
Kontakt, která bude mít například tyto vlastnosti:class Kontakt | +-- Long id | +-- String jmeno | +-- String telefonniCislo | +-- String email -
Třídě
Kontaktvytvořte i konstruktor, aby se její objekty snadno vyráběly:public Kontakt(Long id, String pocatecniJmeno, String pocatecniTelefonniCislo, String pocatecniEmail)Zároveň je ale třeba mít i bezparametrický konstruktor:
public Kontakt()
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.