Hlavní navigace

Apache Struts 1.1: modul Validator

Lukáš Zapletal 20. 5. 2003

Webový aplikační rámec Struts z dílny nadace Apache Software Foundation je skvělým řešením pro ty, kteří chtějí maximálně využít programového modelu MVC ve webových aplikacích využívajících technologii JSP. Dnes se budeme věnovat skvělému modulu z tohoto systému -- Validator.

Díky modulární architektuře projektu Struts s možností vývoje zásuvných modulů se dva pluginy již staly součástí oficiální distribuce. Jsou to moduly Validator a Tiles. Věnujme se nyní prvnímu jmenovanému.

Modul Validator slouží, jak je asi každému jasné, k ověřování zadání uživatele, tedy k ověřování dat z formulářů před tím, než se pošlou ke zpracování. Projekt, který se touto problematikou zaobírá, se nazývá Validator a je k dispozici na Jakartě-Commons. Vývojáři Strutsu využili jeho služeb, doplnili jej o některé zajímavé vlastnosti a napojili ho do aplikačního rámce Struts jako plugin.

Plugin Validator nabízí vše, co jeho starší bratr Commons-Validator. Umožňuje vytvářet validační metody, které kontrolují jednotlivé vlastnosti objektu JavaBean (resp. FormBean). Plugin navíc používá Jakarta ORO, což je knihovna pro zpracovávání regulárních výrazů. V konfiguračním souboru (XML) zkrátka nadefinujete, co se má jak kontrolovat, a Validator se již o vše postará. Jak prosté a elegantní!

Použití modulu je jednoduché. Struts ho má již v sobě (soubory common-validator.jar a jakarta-oro.jar). Stačí nakopírovat soubor validator-rules.xml a validation.xml z nějakého příkladu a začít. Soubor validator-rules.xml obsahuje obecné, na projektu nezávislé definice nejběžnějších pravidel, jako je e-mail, url, číslo kreditní karty, datum, čas atd. Tento soubor pravděpodobně nebudete muset měnit.

Pro naši aplikaci si nadefinujme vlastní pravidla a ta uložíme právě do validation.xml. Pomocí regulárních výrazů, které jsou opravdu mocné a pokrývají širokou paletu potencionálních vstupů, můžeme snadno ověřit cokoliv. Pokud nám regulární výraz nebude stačit, máme možnost vytvořit si vlastní validační objekt (resp. metodu) a ten pak v projektu použít. Kontrolovat tak můžeme prakticky jakýkoliv vstup.

Konfigurační soubor validation.xml se dělí na dvě části. Sekce constant obsahuje konstantní proměnné (řetězce nebo regulární výrazy), které se mohou dále používat syntaxí ${proměnná} (jako v Antu). Dále může obsahovat značky formset, ve kterých jsou již vlastní definice pravidel pro každý formulář zvlášť. Každý formset také může překrýt globální konstanty vlastními definicemi. Zajímavé je, že můžete pro každý jazyk vytvořit jiný formset. Pokud se tedy uživatel přepne ve webové aplikaci z angličtiny na češtinu, automaticky se tím změní i pravidla, což se může projevit jinou kontrolou datumu apod. Navíc aplikace může uživateli nabídnout ten jazyk, který upřednostňuje jeho prohlížeč. Je to velice šikovná vlastnost. Následuje malý příklad s ověřováním telefonu:


Tabulka č. 431
<form-validation>
<global>
<constant>
 <constant-name>phone</constant-name>
 <constant-value>
  ^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$
 </constant-value>
</constant>
</global>
<formset language="cs" country="CZ">
 <constant>
  <constant-name>phone</constant-name>
  <constant-value>
   ^(\d{3})[-| ]?(\d{3})[-| ]?(\d{3})$
  </constant-value>
 </constant>
 <form name="sendSmsForm">
  <field property="phone" 
     depends="required,mask,minLength">
   <msg name="required" 
     key="validation.phone.missing"/>
   <msg name="mask"
     key="validation.phone.invalidformat"/>
   <msg name="minLength"
     key="validation.phone.invalidlength"/>
   <var>
    <var-name>mask</var-name>
    <var-value>${phone}</var-value>
    </var>
   <var>
    <var-name>minLength</var-name>
    <var-value>5</var-value>
   </var>
  </field>
 </form>
</formset>
</form-validation>
Pravidla pro ověření českého telefonu

Jak vidíme, každé políčko formuláře <field> může mít vlastní pravidlo. Pomocí atributu depends řekneme, jak budeme pole kontrolovat, díky značce <msg> můžeme sestavit příslušné chybové zprávy (můžeme samozřejmě využít Struts resources) a konečně pomocí značky <var> definujeme vlastní pravidlo. V příkladu jsme poručili Validatoru, aby pole phone považoval za povinné pole minimální délky 5 a aby jej ověřil regulární maskou phone, kterou máme uloženou mezi konstantami. Zdatný programátor již ví, že tento regulární výraz akceptuje 9 číslic, ve kterých mohou být mezery či pomlčky po třech (777 123 456 a podobně).

Možnosti Validatoru a hlavně definic pravidel tak zdaleka nejsou vyčerpány. Můžete definovat daleko složitější pravidla, která mohou uživateli podat detailní zprávy o vyskytnutém problému (to díky značkám <arg0><arg3>). Nám to ale prozatím postačí. Pro aktivaci Validatoru stačí dodat do konfiguračního souboru jednoduchou XML značku.

Tabulka č. 432
<plug-in
 className="org.apache.struts.validator.ValidatorPlugIn">
 <set-property
   property="pathnames"
   value="/WEB-INF/validator-rules.xml,
          /WEB-INF/validation.xml"/>
</plug-in>
Aktivace pluginu Validator

A je to! To je opravdu všechno! Validator již pro všechny nadefinované formuláře zajistí kontrolu a případné chyby předá pomocí ActionError objektu, který si formulář zachytí pomocí značky <html:errors/>.

Pokud používáte kvalitní editor schopný kontrolovat XML soubory pomocí DTD pravidel, máte při konfiguraci velikou výhodu. Takový editor totiž ihned zobrazí špatný parametr nebo značku na nesprávném místě. Konfigurace Strutsu je pak radostí. Můžete koneckonců použít i grafický konfigurátor, kterých je pro Struts dostatek (např. Struts console), ale já osobně nemám rád XML kód generovaný těmito nástroji. Je dosti nepřehledný.

V příštím a posledním dílu zaostříme zrak na modul Tiles, který umožňuje efektivní výstavbu konfigurovatelných portálů a intranetů.

http://jakarta­.apache.org/struts

Našli jste v článku chybu?
Podnikatel.cz: E-Ježíšek si i letos zařádí. Nákupy od 2 do 5 tisíc

E-Ježíšek si i letos zařádí. Nákupy od 2 do 5 tisíc

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR