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.
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.
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>
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>
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.