[cvs] expresso/expresso-web/expresso/doc Validating user input.rtf
JCorporate Ltd
jcorp at jcorp2.servlets.net
Mon Jul 19 17:20:27 PDT 2004
Update of /home/javacorp/.cvs/expresso/expresso/expresso-web/expresso/doc
In directory jcorp2.servlets.net:/tmp/cvs-serv31158
Added Files:
Validating user input.rtf
Log Message:
validator howto
--- NEW FILE: Validating user input.rtf ---
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1036\deflangfe1036{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
{\f187\froman\fcharset238\fprq2 Times New Roman CE;}{\f188\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f190\froman\fcharset161\fprq2 Times New Roman Greek;}{\f191\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f192\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f193\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f194\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f195\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\f197\fswiss\fcharset238\fprq2 Arial CE;}{\f198\fswiss\fcharset204\fprq2 Arial Cyr;}{\f200\fswiss\fcharset161\fprq2 Arial Greek;}{\f201\fswiss\fcharset162\fprq2 Arial Tur;}{\f202\fswiss\fcharset177\fprq2 Arial (Hebrew);}
{\f203\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f204\fswiss\fcharset186\fprq2 Arial Baltic;}{\f205\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f207\fmodern\fcharset238\fprq1 Courier New CE;}{\f208\fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f210\fmodern\fcharset161\fprq1 Courier New Greek;}{\f211\fmodern\fcharset162\fprq1 Courier New Tur;}{\f212\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f213\fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f214\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f215\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red2\green50\blue100;}
{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 \snext0 Normal;}{
\s2\ql \li0\ri0\sb240\sa240\widctlpar\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \cbpat17 \f1\fs26\cf8\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 \sbasedon0 \snext2 \styrsid12923032 heading 2;}{\*\cs10 \additive \ssemihidden
Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{
\s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 \sbasedon0 \snext15 \styrsid12923032 Normal (Web);}{\*\cs16 \additive \b
\sbasedon10 \styrsid12923032 Strong;}{\s17\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 \sbasedon0 \snext17 \styrsid12923032 HTML Preformatted;}{\*\cs18 \additive \fs20\loch\f2\hich\af2\dbch\af0 \sbasedon10 \styrsid12923032 HTML Code;}}{\*\listtable{\list\listtemplateid382234976
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0
{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}
\f10\fs20\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600
\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid947352650}{\list\listtemplateid706237600\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0
\levelindent0{\leveltext\leveltemplateid67895297\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\leveltemplateid67895299\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895301
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895297\'01\u-3913 ?;}{\levelnumbers;}
\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895299\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600
\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895301\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895297\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895299\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895301\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1246457967}{\list\listtemplateid1902254704{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fs20\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0
\fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0
\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0
\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1395158331}{\list\listtemplateid-1114348352{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0
\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fs20\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}
\f2\fs20\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2160
\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0
\fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs20\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }
{\listname ;}\listid1453281894}{\list\listtemplateid-1925004996\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895313\'02\'00);}{\levelnumbers\'01;}\fbias0
\fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895321\'02\'01.;}{\levelnumbers\'01;}\fi-360\li1440\jclisttab\tx1440\lin1440 }
{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895323\'02\'02.;}{\levelnumbers\'01;}\fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0
\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895311\'02\'03.;}{\levelnumbers\'01;}\fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1
\levelspace0\levelindent0{\leveltext\leveltemplateid67895321\'02\'04.;}{\levelnumbers\'01;}\fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
\leveltemplateid67895323\'02\'05.;}{\levelnumbers\'01;}\fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895311
\'02\'06.;}{\levelnumbers\'01;}\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895321\'02\'07.;}{\levelnumbers\'01;}\fi-360\li5760
\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67895323\'02\'08.;}{\levelnumbers\'01;}\fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname
;}\listid1614752131}}{\*\listoverridetable{\listoverride\listid1395158331\listoverridecount0\ls1}{\listoverride\listid1453281894\listoverridecount0\ls2}{\listoverride\listid947352650\listoverridecount0\ls3}{\listoverride\listid1614752131
\listoverridecount0\ls4}{\listoverride\listid1246457967\listoverridecount0\ls5}}{\*\pgptbl {\pgp\ipgp21\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp18\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp13\itap0\li22\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0
\ri0\sb0\sa0}{\pgp\ipgp22\itap0\li22\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp17\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp15\itap0\li0\ri0\sb0\sa0}
{\pgp\ipgp5\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp19\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp10\itap0\li22\ri0\sb0\sa0}{\pgp\ipgp3\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp23\itap0\li22\ri0\sb0\sa0}{\pgp\ipgp14\itap0\li22\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp
\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp24\itap0\li22\ri0\sb0\sa0}{\pgp\ipgp20\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp9\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid144970\rsid149285\rsid2830997\rsid2837187\rsid4219847\rsid5903239
\rsid5969410\rsid5980885\rsid7943716\rsid8459379\rsid8864801\rsid8984069\rsid10772352\rsid12923032\rsid13787442}{\*\generator Microsoft Word 10.0.6612;}{\info{\title Validating user input}{\author Raul Davidovich}{\operator Raul Davidovich}
{\creatim\yr2004\mo7\dy15\hr23\min38}{\revtim\yr2004\mo7\dy15\hr23\min38}{\version2}{\edmins0}{\nofpages12}{\nofwords2868}{\nofchars15779}{\*\company Maison}{\nofcharsws18610}{\vern16389}}\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1417
\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale148\viewzk2\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot2830997 \fet0
\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3
\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\b\fs32\lang2057\langfe1036\langnp2057\insrsid2830997\charrsid5903239 Validating user input.}{
\b\fs32\lang2057\langfe1036\langnp2057\insrsid2830997
\par }{\b\fs32\lang2057\langfe1036\langnp2057\insrsid5903239
\par }{\i\fs20\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 Author: Raul Davidovich
\par DMCI
\par http://www.dmci.eu.com
\par }{\lang2057\langfe1036\langnp2057\insrsid2830997\charrsid5903239
\par Since 5.}{\lang2057\langfe1036\langnp2057\insrsid4219847 6, Expresso has }{\lang2057\langfe1036\langnp2057\insrsid4219847\charrsid5903239 integrated}{\lang2057\langfe1036\langnp2057\insrsid4219847 Struts Validator}{
\lang2057\langfe1036\langnp2057\insrsid2830997\charrsid5903239 . This framework makes input validation very simple and flexible.
\par
\par Struts Validator can be called automatically when submitting the form, or manually from the handle State. It can also automatically generate client-side Javascript form validation.
\par
\par As}{\lang2057\langfe1036\langnp2057\insrsid8864801\charrsid5903239 all Struts components, Validator is configured by XML files, and it\rquote s designed to be modular.}{\lang2057\langfe1036\langnp2057\insrsid2830997\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par In Expresso, Validator has been modified to use the handle state name instead of the form name for identifying the forms to validate, simplifying the use of multi-page forms}{\lang2057\langfe1036\langnp2057\insrsid7943716\charrsid5903239 .}{
\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid8864801\charrsid5903239
\par }{\b\fs28\lang2057\langfe1036\langnp2057\insrsid8864801\charrsid5903239 Setting up the Validator plugin
\par }{\lang2057\langfe1036\langnp2057\insrsid8864801\charrsid5903239
\par To set up the plugin, one must add it to the struts-config.xml file, as follows:
\par
\par <struts-config>
\par }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8864801 {\lang2057\langfe1036\langnp2057\insrsid8864801\charrsid5903239 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
\par <set-property property="pathnames" value="/WEB-INF/config/validator-rules.xml,/WEB-INF/config/validation.xml" />
\par </plug-in>
\par </struts-config>
\par
\par The pathnames property tells the plugin where to find the configuration files. You can set it to wherever you like.
\par }{\lang2057\langfe1036\langnp2057\insrsid13787442\charrsid5903239 The validation-rules.xml file describes each rule that can be applied, saying which class will actually do the job, and the javascript code }{
\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 used in client-side validation.
\par }{\lang2057\langfe1036\langnp2057\insrsid13787442\charrsid5903239 The validation.xml file sets which rules to apply to each field of each form to validate, and what response to give if the validation fails.
\par }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid13787442\charrsid5903239 Configuring the rules to apply for validating the forms
\par
\par The form validation is configured in the}{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 validation.xml file as follows:}{\lang2057\langfe1036\langnp2057\insrsid13787442\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid5969410 {\insrsid5969410\charrsid5903239
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid10772352 {\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 <form-validation>
\par <global>
\par </global>
\par <formset>
\par }{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <form }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 name="my}{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 HandleState}{
\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 ">
\par }{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <field }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 property="myProp"}{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 }{
\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 depends="required}{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 ,minlength}{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 ">
\par <arg0 key=" myProp is required" resource="false"/>
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid12923032 {\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <var>
\par <var-name>minlength</var-name>
\par <var-value>5</var-value>
\par </var>
\par <msg name="minlength" key="myapp.errormsgs.minlengthmsg"/>
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid10772352 {\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 </field>
\par </form>
\par </formset>
\par <formset language="fr">
\par <form name="}{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 myHandleState }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 ">}{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 <field property="myProp"}{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 depends="required}{
\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 ,minlength }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 ">
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid12923032 {\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <arg0 key=" myProp est requis" resource="false"/>
\par <var>
\par <var-name>minlength</var-name>
\par <var-value>5</var-value>
\par </var>
\par <msg name="minlength" key="myapp.errormsgs.minlengthmsg"/>
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid10772352 {\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 </field>
\par </form>
\par </formset>
\par </form-validation>
\par
\par }{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 E}{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 ach <formset> tag contains <form> tags. Each form to validate should have it\rquote s <form> tag.}{
\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 The \'93name\'94 property must be the same as the }{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 handle state for this form}{
\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 .}{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 The <form> tag contains one <field> tag for each field to }{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 check when validating the form.
\par }{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 The \'93name\'94 property must be the same as the field name }{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 (the Input) }{
\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239 in the web page}{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 .
\par The \'93depends\'94 property defines which rules to apply to this field.}{\lang2057\langfe1036\langnp2057\insrsid10772352\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 Insid}{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 e the <field> tag can be nested:
\par }{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 <argn> tags defining }{\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 replacement parameters for any messages returned to the user. N is the order of the message to replace.
\par <var> tags with variable properties }{\lang2057\langfe1036\langnp2057\insrsid5969410\charrsid5903239 to pass to the validation functions (the maximum length of the field, a mask to apply, etc)
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid12923032 {\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <msg> tags specifying custom message keys for validators
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid10772352 {\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par If no replacement messages are defined, the default messages from validator-rules.xml will be used.
\par
\par
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12923032 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 Global constants can be inside the }{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 global tags}
{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 >}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and FormSet/Locale constants can be created in the }{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 formset}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 >}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 tags. Constants are currently only replaced in the Field's property attribute, the Field's }{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 var}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 >}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 element value attribute, the Field's }{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 msg}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 >}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 element key attribute, and Field's }{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 arg0}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 > }{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 -}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 arg3}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 >}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
element's key attribute. The order of replacement is FormSet/Locale constants are replaced first, Global constants second, and for the }{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 arg}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 >}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 elements variables are replaced last}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 :
\par }\pard\plain \s17\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 <global>
\par <constant>
\par <constant-name>zip</constant-name>
\par <constant-value>^\\d\{5\}(-\\d\{4\})?$</constant-value>
\par </constant>
\par </global>
\par <field
\par property="zip"
\par depends="required,mask">
\par <arg0 key="registrationForm.zippostal.displayname"/>
\par <var>
\par <var-name>mask</var-name>
\par <var-value>$\{zip\}</var-value>
\par }{\cs18\f0\fs24\cf1\insrsid8984069\charrsid5903239 </var>
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\cf1\insrsid8984069\charrsid5903239 </field>
\par
\par }{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 The var element under a field can be used to store variables for use by a pluggable validator. These variables are available through the Field's }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 getVar(String key)}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 method:
\par }\pard\plain \s17\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par <field
\par property="integer"
\par depends="required,integer,intRange">
\par <arg0 key="typeForm.integer.displayname"/>
\par <arg1
\par name="intRange"
\par key="$\{var:min\}"
\par resource="false"/>
\par <arg2
\par name="intRange"
\par key="$\{var:max\}"
\par resource="false"/>
\par <var>
\par <var-name>min</var-name>
\par <var-value>10</var-value>
\par </var>
\par <var>
\par <var-name>max</var-name>
\par <var-value>20</var-value>
\par </var>
\par }{\cs18\f0\fs24\cf1\insrsid8984069\charrsid5903239 </field>}{\f0\fs24\cf1\insrsid8984069\charrsid5903239
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12923032 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cf1\lang2057\langfe1036\langnp2057\insrsid5903239
\par }{\b\fs28\cf1\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 Standard Built In Validations
\par }{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 Validator is shipped with the following set of pre-defined validation rules.
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 required}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - mandatory field validation. Has no variables.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="name" depends="required">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.name"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs16\b\cf1\insrsid12923032\charrsid5903239 requiredif}{
\cf1\insrsid12923032\charrsid5903239 - field dependant validator
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\f0\fs24\cf1\insrsid12923032\charrsid5903239 Deprecated, use validwhen.
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 validwhen}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validator for checking one field against another.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 see later section titled }{\cs16\b\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
Designing "Complex Validations with validwhen"}{\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 .
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 minlength}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validate input data isn't less than a specified minimum length. }{
\cf1\insrsid12923032\charrsid5903239 Requires a }{\cs18\cf1\insrsid12923032\charrsid5903239 minlength}{\cf1\insrsid12923032\charrsid5903239 variable.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <field property="name" depends="required,minlength">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.name"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <arg1 name="minlength" key="$\{var:minlength\}" resource="false"/>
\par <var><var-name>minlength</var-name><var-value>3</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 maxlength}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validate input data doesn't exceed a specified maximum length. }{
\cf1\insrsid12923032\charrsid5903239 Requires a }{\cs18\cf1\insrsid12923032\charrsid5903239 maxlength}{\cf1\insrsid12923032\charrsid5903239 variable.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <field property="name" depends="required,maxlength">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.name"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <arg1 name="maxlength" key="$\{var:maxlength\}" resource="false"/>
\par <var><var-name>maxlength</var-name><var-value>30</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 mask}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validate format according to a regular expression. Requires a }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 mask}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variable to specify the regular expression. Since version 1.1, the regular expression must start with a }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 ^}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and end with a }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 $}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 (see example below).
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="name" depends="required,mask">
\par <msg name="mask" key="registrationForm.lastname.maskmsg"/>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="registration.name"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <var><var-name>mask</var-name><var-value>^[a-zA-Z]*$</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 byte}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to a Byte.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="age" depends="byte">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="employee.age"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 short}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to a Short.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="productnumber" depends="short">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="order.prodno"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 integer}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to an Integer.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="ordernumber" depends="integer">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="order.number"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 long}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to a Long.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="ordernumber" depends="long">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="order.number"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 float}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to a Float.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="amount" depends="float">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="sale.amount"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 double}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to a Double.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="amount" depends="double">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="sale.amount"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 date}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a field can be converted to a Date. This validation rule uses }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 java.text.SimpleDateFormat}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 to parse the date and optionally either a }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 datePattern}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 or }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 datePatternStrict}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variable can be used. If no pattern is specified the default short date format is assumed. The difference between using the }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 datePatternStrict}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 datePattern}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variables is that }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 datePatternStrict}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
checks additionally that the input data is the same length as the pattern specified (so for example 1/1/2004 would fail with a pattern of }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 MM/dd/yyyy}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 ).
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="saledate" depends="required,date">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="myForm.saledate"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <var><var-name>datePattern</var-name><var-value>MM/dd/yyyy</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <field property="saledate" depends="required,date">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="sale.orderdate"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <var><var-name>datePatternStrict</var-name><var-value>MM/dd/yyyy</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs16\b\cf1\insrsid12923032\charrsid5903239 range}{
\cf1\insrsid12923032\charrsid5903239 - validate number range.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 Deprecated, use intRange, floatRange or doubleRange.
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 intRange}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that an integer field is within a specified range. Requires }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 min}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 max}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variables to specify the range. This validator depends on the }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 integer}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 validator which must also be in the field's }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 depends}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 attribute.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="age" depends="required,integer,intRange">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="employee.age"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <arg1 name="intRange" key="$\{var:min\}" resource="false"/>
\par <arg2 name="intRange" key="$\{var:max\}" resource="false"/>
\par <var><var-name>min</var-name><var-value>18</var-value></var>
\par <var><var-name>max</var-name><var-value>65</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 floatRange}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a float field is within a specified range Requires }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 min}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 max}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variables to specify the range. This validator depends on the }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 float}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 validator which must also be in the field's }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 depends}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 attribute.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="ordervalue" depends="required,float,floatRange">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="order.value"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <arg1 name="floatRange" key="$\{var:min\}" resource="false"/>
\par <arg2 name="floatRange" key="$\{var:max\}" resource="false"/>
\par <var><var-name>min</var-name><var-value>100</var-value></var>
\par <var><var-name>max</var-name><var-value>4.99</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 doubleRange}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates that a double field is within a specified range Requires }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 min}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 max}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variables to specify the range. This validator depends on the }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 double}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 validator which must also be in the field's }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 depends}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 attribute.
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="ordervalue" depends="required,double,doubleRange">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="employee.age"/>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <arg1 name="doubleRange" key="$\{var:min\}" resource="false"/>
\par <arg2 name="doubleRange" key="$\{var:max\}" resource="false"/>
\par <var><var-name>min</var-name><var-value>100</var-value></var>
\par <var><var-name>max</var-name><var-value>4.99</var-value></var>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 creditCard}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validate credit card number format
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="name" depends="required, creditCard">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.cardnumber"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs16\b\cf1\insrsid12923032\charrsid5903239 email}{
\cf1\insrsid12923032\charrsid5903239 - validate email address format
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <field property="customeremail" depends="email">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.email"/>
\par </field>
\par }{\f0\fs24\cf1\insrsid12923032\charrsid5903239
\par }\pard\plain \ql \li360\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 url}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - validates url format. Has four }{\i\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
optional}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variables (}{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 allowallschemes}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 , }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 allow2slashes}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 , }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 nofragments}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 schemes}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
) which can be used to configure this validator.
\par }\pard \ql \li1080\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin1080\itap0\pararsid5903239 {\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 allowallschemes}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 specifies whether all schemes are allowed. Valid values are }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 true}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 or }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 false}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 (default is }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 false}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 ). If this is set to }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 true}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 then the }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 schemes}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 variable is ignored.
\par }{\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 allow2slashes}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 specifies whether double '/' characters are allowed. }{\cf1\insrsid12923032\charrsid5903239
Valid values are }{\cs18\cf1\insrsid12923032\charrsid5903239 true}{\cf1\insrsid12923032\charrsid5903239 or }{\cs18\cf1\insrsid12923032\charrsid5903239 false}{\cf1\insrsid12923032\charrsid5903239 (default is }{\cs18\cf1\insrsid12923032\charrsid5903239
false}{\cf1\insrsid12923032\charrsid5903239 ).
\par }{\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 nofragments}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 specifies whether fragements are allowed. Valid values are }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 true}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 or }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 false}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 (default is }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 false}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 - i.e. f
ragments are allowed).
\par }{\cs16\b\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 schemes}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
- use to specify a comma separated list of valid schemes. If not specified then the defaults are used which are }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 http}{
\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 , }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 https}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 and }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 ftp}{\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 .
\par }\pard\plain \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5903239
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par <field property="custUrl" depends="url">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.url"/>
\par </field>
\par
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <field property="custUrl" depends="url">
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 <arg0 key="customer.url"/>
\par <var>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <var-name>nofragments</var-name>
\par <var-value>true</var-value>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </var>
\par <var>
\par }{\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239 <var-name>schemes</var-name>
\par <var-value>http,https,telnet,file</var-value>
\par }{\cs18\f0\fs24\cf1\insrsid12923032\charrsid5903239 </var>
\par </field>
\par }\pard \s17\ql \li360\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid5980885 {
\cs18\f0\fs24\cf1\insrsid5980885\charrsid5903239
\par
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\b\fs28\cf1\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 Designing Complex Validations with valid when
\par }{\cf1\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 }{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
[Since Struts 1.2.0] A frequent requirement in validation design is to validate one field against another (for example, if you
have asked the user to type in a password twice for confirmation, to make sure that the values match.) In addition, there are fields in a form that may only be required if other fields have certain values. The }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 validwhen}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 validation rule is designed to handle these cases.
\par The }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 validwhen}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 rule takes a single }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 var}
{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 field, called }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 test}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
. The value of this var is a boolean expression which must be true in order for the validation to success. }{\cf1\insrsid8984069\charrsid5903239 The values which are allowed in the expression are:
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ql \fi-360\li742\ri0\sb100\sa100\sbauto1\saauto1\widctlpar
\jclisttab\tx720\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin742\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 Single or double-quoted string literals.
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Integer literals in decimal, hex or octal format
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}The value }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 null}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 which will match against either null or an empty string
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Other fields in the form referenced by field name, such as }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 customerAge}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Indexed fields in the form referenced by an explicit integer, such as }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 childLastName[2]}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Indexed fields in the form referenced by an implicit integer, such as }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 childLastName[]}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 , which will use the same index into the array as the index of the field being tested.
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Properties of an indexed fields in the form referenced by an explicit or implicit integer, such as }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 child[].lastName}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 , which will use the same index into the array as the index of the field being tested.
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}The literal }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 *this}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 , which contains the value of the field currently being tested
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 As an example of how this would work, consider a form with fields }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 sendNewsletter}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 and }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 emailAddress}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 . The }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 emailAddress}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 field is only required if the }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 sendNewsletter}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 field is not null. You could code this using the validwhen rule as:
\par }\pard\plain \s17\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par <field property="emailAddress" depends="validwhen">
\par <arg0 key="userinfo.emailAddress.label"/>
\par <var>
\par <var-name>test</var-name>
\par <var-value>((sendNewsletter == null) or (*this* != null))</var-value>
\par </var>
\par </field>
\par }{\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 Which reads as: this field is valid if }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 sendNewsletter}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 is }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 null}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 or the field value is not }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 null}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 .
\par Here's a slightly more complicated example using indexed fields. Assume a form with a number of lines to allow the user to enter part numbers and quantities they wish to order. An array of beans of class }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 orderLine}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
is used to hold the entries in a property called orderLines. If you wished to verify that every line with part number also had a quantity entered, you could do it with:
\par }\pard\plain \s17\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par <field property="quantity" indexedListProperty="orderLines" depends="validwhen">
\par <arg0 key="orderform.quantity.label"/>
\par <var>
\par <var-name>test</var-name>
\par <var-value>((orderLines[].partNumber == null) or (*this* != null))</var-value>
\par </var>
\par </field>
\par }{\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 Which reads as: This field is value if the corresponding }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 partNumber }{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 field is }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 null}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 , or this field is not }{
\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 null}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 .
\par As a final example, imagine a form where the user must enter their height in inches, and if they are under 60 inches in height, it is an error to have checked off nbaPointGuard as a career.
\par }\pard\plain \s17\ql \li0\ri0\widctlpar\tx916\tx1832\tx2748\tx3664\tx4580\tx5496\tx6412\tx7328\tx8244\tx9160\tx10076\tx10992\tx11908\tx12824\tx13740\tx14656\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069
\f2\fs20\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cs18\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par <field property="nbaPointGuard" depends="validwhen">
\par <arg0 key="careers.nbaPointGuard.label"/>
\par <var>
\par <var-name>test</var-name>
\par <var-value>((heightInInches >= 60) or (*this* == null))</var-value>
\par </var>
\par </field>
\par }{\f0\fs24\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par }\pard\plain \s15\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 A few quick notes on the grammer.
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ql \fi-360\li742\ri0\sb100\sa100\sbauto1\saauto1\widctlpar
\jclisttab\tx720\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin742\itap0\pararsid8984069 \fs24\lang1036\langfe1036\cgrid\langnp1036\langfenp1036 {\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
All comparisons must be enclosed in parens.
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Only two items may be joined with }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 and}{
\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 or }{\cs18\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 or}{\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239
\par {\listtext\pard\plain\f3\fs20\cf1\lang2057\langfe1036\langnp2057\insrsid8984069\charrsid5903239 \loch\af3\dbch\af0\hich\f3 \'b7\tab}If both items to be compared are convertable to ints, a numeric comparison is done, otherwise a string comparison is done.
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid5980885 {\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239 \page }{\i\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid4219847
Once the plugin is set up and the form validation is configured, we can start validating our forms.
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid10772352 {\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239
\par }{\b\fs28\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239 Manually validating a form}{\b\fs28\lang2057\langfe1036\langnp2057\insrsid12923032\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239
\par }{\i\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239 NOTE: for manual validation to work as illustrated here, you should either not use custom forms, or have your custom forms to extend DefaultForm. }{
\i\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239 Manual validation is very simple.
\par If you\rquote re using external states, you simply call myStateForm.validate(ControllerRequest request) in your handle state, and the method will return an ErrorCollection with the faile
d validation messages (or empty if the form passed all the validations):
\par
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid5980885 {\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239 public class MyHandleState
\par extends State \{
\par
\par public MyHandleState() \{
\par super();
\par \}
\par
\par public MyHandleState (String newName, String newDescrip) \{
\par super(newName, newDescrip);
\par \}
\par
\par public void perform(StateForm stateForm, ControllerRequest params,
\par ControllerResponse response) throws
\par NonHandleableException, ControllerException \{
\par
\par ErrorCollection errors = stateForm.validate(params);
\par
\par if (errors.getErrorCount() != 0) \{
\par }{\lang2057\langfe1036\langnp2057\insrsid8459379\charrsid5903239 \tab // handle an invalid form
\par \tab // in this case go back to the prompt state
\par }{\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239 response.saveErrors(errors);
\par try \{
\par response.setFormCache();
\par transition("myPromptState", params, response);
\par \}
\par catch (NonHandleableException nhe) \{
\par errors.addError("problem after transition");
\par \}
\par \}
\par else \{
\par }{\lang2057\langfe1036\langnp2057\insrsid8459379\charrsid5903239 // handle a valid form}{\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid8459379\charrsid5903239 \tab // for example update a DBObject with the form data
\par }{\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239 }{\lang2057\langfe1036\langnp2057\insrsid8459379\charrsid5903239 \}}{\lang2057\langfe1036\langnp2057\insrsid5980885\charrsid5903239
\par \}
\par response.saveErrors(errors);
\par setResponse(response);
\par return;
\par
\par \}
\par
\par \}
\par }{\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239
\par
\par If you\rquote re using internal states, it\rquote s a bit trickier, since internal states are not aware of ActionForms.
\par
\par \'85
\par protected void runMyHandleState(ControllerRequest params, ControllerResponse response)\{
\par \'85
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid144970 {\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239 //cast your request to a form-aware request
\par ServletControllerRequest cparams = (ServletControllerRequest)params;
\par //retrieve the form from the request\'85
\par DefaultForm myForm = (DefaultForm)cparams.getForm();
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid5980885 {\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239 \'85
\par //the rest of the process is exactly as in the external states
\par \}
\par
\par
\par
\par
\par }{\b\fs28\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239 Automatically validating a form
\par }{\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239
\par Automatic form validation is configured in the action mappings of your app\rquote s struts-config.xml}{\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239
, and will be enabled or disabled for all the states in the controller referenced by the mapping.}{\lang2057\langfe1036\langnp2057\insrsid144970\charrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 To enable it, you simply set the }{\b\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 validate=\'94true\'94}{\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239
property for the action, and that\rquote s it :D
\par
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid2837187 {\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 <struts-config>
\par <action path="/myAction" type="com.mycompany.myapp.controller.MyController" name="default" scope="request" }{\b\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 validate="true"}{\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 >
\par <forward name="whatever" path="/pages/whatever.jsp"/>
\par </action>
\par </action-mappings>
\par </struts-config>
\par
\par
\par }{\i\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 I repeat, that\rquote s it.. Expresso will handle the rest for you
\par }{\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239
\par
\par }{\b\fs28\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 Using client-side Javascript validation
\par }{\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239
\par Struts Validator can automatically generate Javascript code for validating your forms at the client-side (server-side validation will also be performed no matter if client-side validation is enabled or not).
\par
\par For using it, there are two steps to do in your JSP.
\par
\par {\listtext\pard\plain\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 \hich\af0\dbch\af0\loch\f0 1)\tab}}\pard \ql \fi-360\li720\ri0\widctlpar\jclisttab\tx720\faauto\ls4\rin0\lin720\itap0\pararsid5903239 {
\lang2057\langfe1036\langnp2057\insrsid2837187\charrsid5903239 load the Javascript code corresponding to your form
\par }\pard \ql \li360\ri0\widctlpar\faauto\rin0\lin360\itap0\pararsid5903239 {\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 <html:javascript formName=\'94myHandleState\'94 />
\par
\par {\listtext\pard\plain\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 \hich\af0\dbch\af0\loch\f0 2)\tab}}\pard \ql \fi-360\li720\ri0\widctlpar\jclisttab\tx720\faauto\ls4\rin0\lin720\itap0\pararsid5903239 {
\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 tell the form to call the JS code on submit
\par }\pard \ql \li360\ri0\widctlpar\faauto\rin0\lin360\itap0\pararsid5903239 {\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 <html:form action="/myAction" method="POST" onsubmit="return validateMyHandleState(this)">
\par
\par Now you\rquote ll form will be validated following the rules you defined in validation.xml both, client-side and server-side
\par
\par
\par }\pard \ql \li0\ri0\widctlpar\faauto\rin0\lin0\itap0\pararsid5903239 {\b\fs28\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239 Writing your own pluggable validators
\par }{\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239
\par Please refer to the Struts Validator Developer guide. I couldn\rquote t explain better how to do this\'85}{\lang2057\langfe1036\langnp2057\insrsid5903239
\par }{\lang2057\langfe1036\langnp2057\insrsid5903239\charrsid5903239
\par http://struts.apache.org/userGuide/dev_validator.html
\par }}
More information about the cvs
mailing list