Ú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
Long
se zapisují sL
na konci. Například123456L
. BezL
na 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ě
Kontakt
vytvoř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.