5.2. Validátory

Validace je po konverzi další proces, který zajišťuje korektnost dat. Ta, než jsou uložena do modelu, musí být nejen zkonvertována na správný datový typ, ale musí také odpovídat určitým logickým pravidlům, která vyplývají z podstaty modelu. Jako příklad můžeme uvést případ, kdy chceme, aby uživatel zadal svůj věk. Jednalo by se tedy např. o typ Integer. Uživateli však nic nebrání zadat zápornou hodnotu, což postrádá smysl. K eliminaci takovýchto případů slouží validace.

Standardní JSF knihovna umožňuje validovat interval číselné hodnoty, délku řetězce a přítomnost hodnoty. Všechny tři možnosti si ukážeme dále. Je třeba upozornit, že veškerá JSF validace probíhá na straně serveru. Pokud byste chtěli provádět validaci na straně klienta, museli byste použít některou z klientských skriptovacích technologií, např. JavaScript.

5.2.1. Použití validátorů na stránce

Přiřazení validátorů ke komponentě se provede pouhým vnořením příslušného tagu validátoru do těla tagu komponenty, kterou chceme validovat. Prostředky pro realizaci třech výše zmíněných variant validace naleznete v core tag library.

Interval číselné hodnoty

Zde máte k dispozici dva tagy - validateLongRange, který slouží k validaci celočíselných hodnot, a validateDoubleRange, který slouží k validaci v oboru všech reálných čísel. Oba disponují atributy minimum a maximum pro určení rozsahu, v jakém se má zadávaná hodnota pohybovat. Funkcionalitu tagů zajišťují třídy LongRangeValidator a DoubleRangeValidator z balíčku javax.faces.validator.

Příklad 5.5. Validace intervalu číselné hodnoty

<h:inputText id="vek" value="#{uzivatel.vek}" validatorMessage="Hodnota se musí nacházet v intervalu <0;200>!">
    <f:validateLongRange minimum="0" maximum="200"/>
</h:inputText>

Délka řetězce

Pro kontrolu délky řetězce slouží tag validateLength, jehož funkcionalitu zajišťuje třída LengthValidator, která je rovněž z balíčku javax.faces.validator. Stejně jako dva předchozí tagy přijímá atributy minimum a maximum.

Příklad 5.6. Validace intervalu číselné hodnoty

<h:inputText id="vek" value="#{uzivatel.rodneCislo}">
    <f:validateLength minimum="10" maximum="10"/>
</h:inputText>

Přítomnost hodnoty

Pro kontrolu přítomnosti hodnoty není v JSF žádný tag, nýbrž atribut required, o kterém jsme již mluvili v sekci 4.3.3 – „Textové prvky“. Přijímá hodnotu typu Boolean. Pokud je nastavena na true, uživatel nemůže nechat před potvrzením formuláře pole prázdné.

Příklad 5.7. Validace intervalu číselné hodnoty

<h:inputText id="vek" value="#{objednavka.rodneCislo}" required="true" requiredMessage="Rodné číslo musí být vyplněno."/>
<h:message for="vek" style="color:red"/>

Zprávy o chybách se zde obsluhují stejným způsobem, jako u konverze tzn. pomocí tagů message a messages. I zde bych rád upozornil na atributy, pomocí kterých lze měnit standardní znění chybových zpráv, a sice requiredMessage a validatorMessage. Jejich použití můžete vidět v příkladech výše.

Creative Commons License
Uvedená práce (dílo), jejímž autorem je Bc. David Hanel, podléhá licenci Creative Commons Uveďte autora-Neužívejte dílo komerčně-Zachovejte licenci 3.0 Česko.