Příklad tutoriálu validace JSF – značka validator, vlastní ověřovač


Praktický návod pro validaci v JSF: Značka validator a vlastní validátor

Úvodní informace

JavaServer Faces (JSF) je rozhraní pro tvorbu webových aplikací v jazyce Java. Jednou ze základních funkcí je validace vstupních dat. Tento proces je nezbytný pro zajištění datové integrity a ochranu aplikace před neplatnými či škodlivými vstupy. V tomto návodu si ukážeme, jak využít validaci v JSF pomocí značky <f:validator> a jak si vytvořit vlastní validátor.

Značka <f:validator>

Značka <f:validator> v JSF se používá pro definování pravidel pro ověřování vstupních polí. Umožňuje využívat předdefinované validace, jako je kontrola prázdného pole, rozsah hodnot, formátování dat a další. Spojuje se s dalšími značkami, například <h:inputText> či <h:selectOneMenu>, které představují vstupní prvky na webové stránce.

Příklad využití značky <f:validator>

Uvažujme jednoduché pole pro zadání věku uživatele:


<h:inputText id="age" value="#{userBean.age}">
<f:validator validatorId="ageValidator"/>
</h:inputText>

V tomto případě značka <f:validator> s atributem validatorId="ageValidator" udává, že pro validaci vstupu age se použije validátor s identifikátorem ageValidator.

Typy validátorů

JSF nabízí různé typy validátorů:

  • Vestavěné validátory: JSF poskytuje sadu validátorů, které se aktivují nastavením validatorId v atributu <f:validator>. Patří sem:
    • required: Zkontroluje, zda není pole prázdné.
    • range: Ověří, zda hodnota leží v zadaném rozsahu.
    • length: Zkontroluje délku textového řetězce.
    • pattern: Ověří, zda hodnota odpovídá regulárnímu výrazu.
  • Vlastní validátory: Můžeme si nadefinovat vlastní validace, které splňují specifické požadavky aplikace.

Vlastní validátor

Vlastní validátor je Java třída, která implementuje rozhraní javax.faces.validator.Validator. Obsahuje metodu validate, která kontroluje vstupní data a v případě chyby vyvolá výjimku typu FacesValidatorException.

Příklad implementace vlastního validátoru

Následující kód ukazuje vlastní validátor, který ověřuje, zda je věk v rozmezí 18 až 100 let:


import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("ageValidator")
public class AgeValidator implements Validator {

@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value instanceof Integer) {
int age = (Integer) value;
if (age < 18 || age > 100) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Neplatný věk", "Věk musí být mezi 18 a 100 lety.");
throw new ValidatorException(message);
}
} else {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Neplatný formát", "Věk musí být celé číslo.");
throw new ValidatorException(message);
}
}
}

V tomto kódu:

  • Anotace @FacesValidator("ageValidator") určuje název validátoru, který se použije v atributu validatorId značky <f:validator>.
  • Metoda validate přijímá kontext, komponentu a hodnotu pole.
  • Kód ověřuje, zda je zadaná hodnota typu Integer a pokud ano, kontroluje, zda je v požadovaném rozsahu. Pokud ne, vygeneruje chybovou zprávu.

Integrace vlastního validátoru

Po vytvoření vlastního validátoru je nutné jej zaregistrovat v JSF aplikaci. To se provádí prostřednictvím konfiguračního souboru faces-config.xml.

Příklad konfigurace v faces-config.xml


<faces-config>
<validator>
<validator-id>ageValidator</validator-id>
<validator-class>cz.example.AgeValidator</validator-class>
</validator>
</faces-config>

Tato konfigurace registruje validátor s identifikátorem ageValidator a mapuje ho na implementační třídu cz.example.AgeValidator.

Závěr

Validace dat je klíčová pro zajištění bezpečnosti a spolehlivosti webových aplikací. JSF nabízí flexibilní nástroje pro validaci, včetně vestavěných validátorů a možnosti vytvářet vlastní validátory. V tomto návodu jsme si ukázali základní principy validace v JSF a jak definovat vlastní validátory pro specifické potřeby aplikace.

Často kladené dotazy (FAQ)

1. Co se stane, pokud validace selže?
* Pokud validace selže, JSF zobrazí uživateli chybovou zprávu a zabrání odeslání formuláře. Chybová zpráva se objeví u příslušného vstupního pole.
2. Jaké jsou výhody vlastních validátorů?
* Vlastní validátory umožňují definovat specifické validace, které vestavěné validátory nepokryjí. Například validace sloupce v databázi, složitější kontroly formátu nebo ověření dostupnosti uživatelského jména.
3. Můžu použít více validátorů pro jedno vstupní pole?
* Ano, můžete u jednoho pole použít více značek <f:validator>. Například můžete kombinovat required a range validátor.
4. Jak upravím chybové zprávy generované validátory?
* Chybové zprávy lze upravit v konstruktoru FacesMessage v metodě validate vašeho validátoru. Například: FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Vlastní chyba", "Podrobnosti o chybě.");
5. Jak zobrazím chybové zprávy na stránce?
* Chybové zprávy se zobrazí automaticky u daného pole. Pro zobrazení můžete využít i značku <h:messages>.
6. Existují nástroje pro usnadnění práce s validací v JSF?
* Ano, například PrimeFaces nabízí rozšířenou podporu pro validaci a další funkce pro JSF.
7. Jaké jsou nejlepší postupy pro validaci v JSF?
* Je vhodné validovat data jak na straně klienta, tak serveru. Validační pravidla by měla být pro uživatele jasná a srozumitelná.
8. Existuje alternativa k JSF pro validaci dat?
* Ano, například Spring MVC také podporuje validaci.
9. Je možné validovat data před odesláním formuláře?
* Ano, k validaci na straně klienta lze použít JavaScript nebo jQuery.
10. Kde najdu další informace o validaci v JSF?
* Další informace naleznete v oficiální dokumentaci JSF, v online tutoriálech a na fórech.

Tagy: JSF, validace, validátor, <f:validator>, vlastní validace, chybové hlášky, faces-config.xml