You are on page 1of 19

c  

ÆY ôYweb application frameworkY YY YY



 Y  Y Y  Y
ÚY ô
 YYYY
ÚY ôY
 Y  
 Y
 Y YYY Y   YY  Y  Y
Y   Y
ctruts2 ʹ MVC:
ÆY c
Y  Y      Y Y
ÆY Y Y  YY  YY Y Y Y  YY Y  Y
ÆY JYc
YY Y Y YY Y 
YY     Y   Y
ÆY Y Y
Y Yc
Y YY  YYY Y   Y
Y

Controller Component ʹ FilterDispatcher:

ÆY ¦ YY Y Y Y   Y Y


Y YY Y Y YYYY Y Y
  Y
ÆY ¦ Y   Y Y YYY !
YY Y
ÆY ¦ Y  YY   Y Y YY     Y Yc
Y
ÆY ¦ Y  Y Y YY  Y  Y Y Y Y  Y !
YY  Y
 Y Y 
Y  Y Y !
Y
Y
Model ʹ Action:
Y
ÆY c
Y Y Y  Y  Y"YY
ÚY  YY Y YY
 YY Y YY Y
 Y  Y Y  Y
 YY
 Y
ÚY cY Y  YY 
Y YY  Y
ÚY   Y Y Y
Y Y Y   Y Y   Y  Y 
Y 
Y  Y
 Y  Y  YY 
Y Y Y !
Y Y
Y
View ʹ Result:
Y
ÆY   Y Y Y  YYY YY Y
ÆY c
Y  Y
#Y
 Y YY  Y   Y"Y$c Y   Y
  YY%c¦Y

Y
ctruts2 Architecture:

ÆY £ Y Y !
Y  FilterDispatcherY Y Y  Y YY  Y Y !
Y
ÆY ¦  Y YYYYinterceptorsY Y YY Y Y
ÆY ¦ Y  YY Y
Y  Y 
 Y YY
ÆY ¦ Y   Y Y Y Y YY Y Y Y 
 Y Y 
YY Y
 Y
 Y Y Y Y 
Y Y#
Y
ÆY J Y Y Y Y Y   Y  YY 
 YYYY Y Y
 Y 
 YY Y
YYY Y Y
Y YY
ÆY ValuectackY YY Y Y Y  Y YY YY Y  Y  YY !
Y
ÆY   Y Y Y YY 
Yc
YY Y YY Y  Y  Y"Y

cY
ÆY º Y YY#  Y 
Y Y  Y
YY  YY 
Y YYY

cY
ÆY ¦ YActionContextY Y YY YY YY
Y Y#Y Y  YY Y
Y
ÆY ô #Y Y
cYY Y 
Y
Y Y   Y  Y Y
Y   Y

 YY !
Y YY  YY Yc  ô JY
Y
Y
ÆY ÿY
Yc
Y Y Y&Y Y Y Y
Y
YY 
Y Y   YY Y
 YY' Yc
(#Y
Y# )Y YYY# YY Y
ÆY ¦  Y Y Y Y  Y  
Y"Y%YY 
 Y Y$Y Y

rstruts>
rpackage name=*  * namespace=*+  * extends=*struts-default*>
raction name=, ,class=,  ,>Y
rresult>+ô
  r result>Y
rresult name=, 
,-+  r result>
r action>
r package>
rstruts>
ÆY ¦ Y   Y
Y
# YY Y Y Y¦ Y Y  Y Y Y$Y  YY
Y
Y YY Y  Y£ Y Y Y  YY  Y Y
YY Y
# Y
  Y Y Y
Y Y Y YY 
Y Y%Y Y
ÆY & Y .Y

/
'0Y
/
'1, 
,Y
1,+   c
 ,Y)Y
/
'
1,+   c
 ,Y)Y
2)Y

 Y Y Y  Yô Y0Y

 Yc Y#
')Y0Y
++ÿ
 Y  Y Y  Y
2Y
2Y
ÆY Y Y
Yc
YYYYYYY  YY Y  Y¦ Y
  YY Y Y YYc
Y  Y
Y¦ YY Y
  Y Y

# Y
Y Y
   Y
ÆY £# YY Y .Y

3  -Y
3  -
3+  -Y
3   -org.apache.struts2.dispatcher.FilterDispatcher3+   -Y
3   -Y
3 -actionPackages3+ -Y
3 
- 3+ 
-Y
3+   -Y
3+  -Y
3   -Y
3  -
3+  -Y
3
 - 3+
 -Y
3+   -Y
Y
ÆY actionPackages  Y Y Y Y
Y Y YY
Y Y Y
Y
ÆY struts.xml

3
-Y
3constantY1,
,Y
1,
,Y+-Y
3package name1,
,Ynamespace1,+,Yextends1,

,-Y
3 Y1,
,-Y
3 
-+
+
 3+ 
-Y
3+ -Y
3+-Y
3include file1, +  ¦ +  ¦ # ,+-Y
3 
Y 1, +  ¦ +  ¦ # ,+-Y
YYY
3 
Y 1, +  4  +  4  # ,+-Y
3+
-Y
ÚY Y YYY
YYY   Y   Y5
YY YY Y  Y
  Y Y
ÚY 
# Y YYY YY Y  Y Y Y
YY
ÚY J
Y YYY
YY
Y# Y Y Y   Y  
Y
ÆY £ YYc
Y Y Y  Y YActionY  Y Y Y Y YYY
Y   Y Y
ÆY ¦ Yexecute()Y Y Y
 Y  YY 
YY Y Y  Y  YY Y

Y 
Y  Y Y 
YY
ÆY  YY Y Y Y Y Y Y¦ Y Y
Y Y  Y YYYY
 Y Y#
')Y Y
ÆY cY Y Y YY Y   YYYY Y Y Y Y  Y Y Y Y

cY
ÆY ¦ Y  YY
cY Y
 Y Y Y   YY Y Y Y YY#YY
Y  Y   YY
cY Y
Y
Actions:
ÆY c
Y YYnew instanceYY Y Y Y !
Y
ÆY ô YY  YYYY 
Y  Y YpackagesY¦ YY Y
   YY$YY
ÆY 5
YYY  Y 
Y Y Y.Y
6Y' !
)Y 6YY YY
6Y 6Y Y Y Y YY
4#Y  YYY   Y Y
ô Y JY
Y YY Y YY
YY Y
   YYY Y
Y
ÆY 6Y Y
YY Y YYYY Y YYY
ÆY JY
YYY YY 
Y
Y Y YY Y Ydefault namespace.Y¦ Y

YY Y Y YY Y  YY   YY  Y !
Y Y
Y YY#  YY
ÆY 6Y Y Ydefault namespaceY Y
 Y Yempty stringY7*Y5
YY YY Y
Y
 YY7+*Y¦ Y YY Y YY Y  Y#  YYY
Y
Y Y
ÆY Y Y  Y #  ô Y  Y Y YY
c Y#
')Y  Y4# Y YJY Y YY YY Y4 Y
J6 &¦Y J6YY
ÆY ActioncupportY Y YY Y Y Y  Y
Y   YYô Y
 YY  Y  Y

Y  YJY
Y Y Y#Y Y Y Y

  Y Y Y
YY
Y   YY  Y  Y  Y
ÆY ô Yc
 Y  YY!
Y YY Y  YY
ÆY ¦ Y Y  Y  Yworkflow interceptorYY  Y Y  Y
ÆY £ Y    Y   Y Y Y Y Y Ydalidate()Y YY Y Y' 
 Y
 #    Y  )Y
ÆY JY Y YYYY Y Y YY YY  Y Y Y  YY Y
ô c
 Y
  Y
 YYaddFieldError() addActionError()Y
ÆY ô Y Y  Y  Y Y#
Y  Y 
YY    Y   Y¦ Y    Y
  Y Y YYY   YY  YY  Y YY  Y  Y
£   Y   Y Y Y Y !
Y  YY 
Y Y
 YYY 
Y Y

Y
sing Resource Bundles for message text:

ÆY  Y Y  Y 


Y
 Y   Y Y YYY Y
ÆY  Y YYY Y Y   Y YY Y YYY Y  Y Y Y Y  Y
Y  Y YY
ÆY ôY Y   Y YY YY Y Y Y Y Y
ÆY  #  ¦extProdider  Y  YYY YY  Y
ÆY ô c
 Y Y  Y Y  Y
ÆY &Y¦#   get¦ext()Y YY  YY Y  Y YYY YY
ÆY ô c
 Y Y  Y   Y  Y Y Y ')Y¦ Y
Y
  YY Y Y  Y  Y Y Y   Y Y
ÆY c
Y
Y¦#')Y YYYY Y  Y   Y Y Y  Y  Y

Data transfer:

ÆY ¦  Y Y Y YY  YY


ÆY Y Yparams interceptorY 
Y Y YdefaultctackY
  Y  YY Y Y
!
YY
Y Y Y¦Y Y Y  Y Y  YY YY  Y
$ÿY   YY Y Y
 Y YYYY Y  Y Y
 Y
ÆY ¦ Y
YY  Y Y YYY$ÿY  Y Y Y Y Yÿ
Y Y
Y
Y Y   Y Y YY  Y Y YY  Y Y Y
ÆY ¦ YModelDridenY"Y  Y Y Y Y
YY$ÿY   Y Y# Y
 YYJY Y#YY  Y Y Y YgetModel()Y YY
  Y  YY
ÚY £Y YY Y
Y Y  Y  Y  Y

 Y& Y
 Y1Y Y& ')8Y

 Y  Y ')Y0Y
YYYY 
Y
 8Y
2Y
ÚY £e HAVE to initialize the object ourseldes.
ÚY  Y ')Y Y 
Y
Y Y Y
ÚY £YY 
Y YY Y Y
Y  Y  Y'Y Y Y Y Y¦ )Y
Y
Y
File pload:
Y
ÆY c
Y  Y
 Y
 Y Y Y
 Y
ÆY 
Y   YY 
Y YFileploadInterceptorY
ÆY £ Y & J  Y#
Y Y YY
  Y !
YY  Y Y Y
 Y Y  YYY Y !
Y  Y
] YY Y 9Y  : Y
 Y Y  Y
] YY Y 9¦Y c : YYYY Y Y
] YY Y 9 6Y c : YYY Y
 Y Y
Y YY Y  Y
ÆY £Y YYY Y YYY Y YY
  + Y£  
Y Y Y Y
Y  Y
3. Y 1,J& ,Y 1,,Yenctype="multipart form-data"-Y
Y
Y
Interceptors:
Y
ÆY J  Y Ycross-cuttingYY Y
Y YY
ÆY cYY YY
 YY   Y Y Y Y
 YY Y
   Y Y  YY
ÆY JYc
YY Y Y Y Y   Y
ÆY ¦ Y  YYY Y YY  Y Y Y Y 
Y Y#
 YYYYY
  Y  YYY Y Y
 Y#
 YY Y  Y
ÆY   Y Y Y Y Y#
')Y Y  Y Y   Y YY Y
 YYActionIndocationY Y
Y Y YY YY Y   Y Y Y
Y 
YY Y YY Y Y Y#
Y
ÆY J YYY Y
Y Y  Y 
 Y YYY   Y Y  Y Y
 Y
ÆY ¦ Y Y Y
  Y#
YY 
YY  Y Y Y Y Y  Y 
Y
ÆY ô Y Y 
Y#
Y YY Y   Y Y  Y  YYY YYYY
  Y  Y
ÆY YY Y  
Y
  YYY   Y Y  Y YYalter workflowYY
 Y
ÆY £ Y Y   Y  YY !
Y Y Y
Y YY  Y Y Y&YYôY
YY Y YYYY Y Y YYô J Y6#Y  YY Y
  Y YYY Y YYYô J YJY  Y Yô J Y
 Y  Y  YY  Y  Y   Y Y Y  Y !
Y YYYY
Y Y 
Y  YY Y Y
ÆY ¦ Yô J Y#Y Yindoke()Y Y  Y Y YY Y   YY Y
 Y#
 YY Y
ÆY ô J YY YY YY Y  Y Y Y  YYY  Y
Y  Y   Y Y YY
ÆY JYY YY Y   Yintercept()  Y
ÆY ôY   Y YY Y   Y#
 Y .Y
ÚY YY   Y
ÚY Y  YY Y
 Y   YY
  Y Y YY Y Y
')Y Y  Y#
 YY  Y 
 YY  Y Y
ÚY YY  Y
ÆY c  Y   Y

3 Y1,# ô ,Y 1,# 4# ô ,-Y


3param name1, 6,-$ 3+ -Y
3param name1, 6,-3+ -Y
3+ -Y
Y
ÆY cerdlet-Config Interceptor:
ÚY ¦ Y   Y   Y  YY Y YY   Y 
Y Y Y Y
c  Yô JY Y
Y Y
ÚY ¦ Y   Y  YY Y Y 
Y YY Y Y#YY
 Y Y Y
Y  Y
ÚY   YinterfacesY Y  Y Y   Y 
Y Y  YY  Y
 .Y
c  #ô  Y"Yc  #Y
c  !
ô  Y"Yc  !
Y
c  ô  Y"Yc  Y
  ô  Y"YcYYYY !
Y  Y
!
ô  Y"YYYYY !
Y 
Y
c ô  Y"YYYYY Y Y 
Y
ô  ô  Y"YYYYY  Y  Y 
Y
  ô  Y"YcY Y   Y Y
ÚY 4 YY Y  Y YY Y"YY Y"Y Y 
Y Y!
 Y
ÆY Prepare Interceptor.Y
ÚY £ Y  Y   Y Y Y Y Y  ')Y Y'Y Y
Y Y
 Y   Y  )YJY
Y Y Y   Y  ')Y Y Y
#
Y¦ Y  Y YY YY   YY
Y
ÆY 4# YJ  Y
ÆY ¦oken and ¦oken-session Interceptors:
ÚY ¦ Y   YYY
YYY YY YYY Y
 Y Y

  Y
ÆY ExecAnd£aitYJ  Y
3Y1,

,-Y
3   -Y
3   Y1,#ô£ ,Y 1,4#
ô£ J  ,+-Y
3   Y1,# ,Y 1,4#  J  ,+-Y
3   Y1, & ,Y 1, & J  ,+-Y
YYYYYYYYY;Y
3   Y1,
c,-Y
3    Y1,# ,+-Y
3    Y1, ,+-Y
3    Y1,   ,+-Y
3+   -Y
Y
3+   -Y
3
    Y1,
c,+-Y
3+-Y
Y
ÆY J  Y   Y
YY Y YYY Y
ÆY rinterceptors> Y Y Y Y3Interceptor>YY3interceptor-stack>Y   YY
 YYôYYY  YY
YYY   Y


 Y Yô
   J  implements InterceptorY0Y

 Y Ydestroy()Y0Y
2Y

 Y Yinit()Y0Y
2Y

 Yc Yintercept'ActionIndocation actionIndocationY)Y
  Y4# 0Y
Map session = actionIndocation.getIndocationContext().getcession();
& Y
 Y1Y'& )Y 'Yc
   &c4Y)8Y
Y'
 Y11Y
)Y0Y

Yô  J68Y
2Y
 Y0Y
Action action = ( Action ) actionIndocation.getAction();
Y' Y & ô  )Y0Y
''& ô  ) )& '
 )8Y
2Y

YactionIndocation.indoke()8YYY 
Y Y  Y
2Y
2Y
2Y
Y

º 

ÆY 6YY Y Y


Y#  Y 
YYc
Y
ÆY 6Y"Yºbject raph adigation anguageY
ÆY 
cY  YYYY Y¦ Y Y Y Y   Y¦ Y YY
cY Y
 Y Y   YY Y Y YY   YY
cY  Y
ÆY ô Y Y Y Y YY
cYY Y Y   YY Y Y Y#YY
   YY
cY
ÆY JY  Y Y Y Y  YY  YY Y
cY Y  YY Y   Y Y
Y YY Y
Y   YY   YY   Y YY
ÆY £ Y 
Y Y Y  Y Y  Y Y YYY
cY Y 6Y#  Y

Y Y YY¦ YY Y  YY Y
cYY   Y  Y
Y
 Y 6Y#  Y
ÆY c
YY  Y
 Y
 Y Y  Y Y<¦¦ Y Y YY  Y$Y
.YYctring, Boolean Boolean, char Character, int Integer, float Float, long ong,
double Double, Date(cHºR¦ format), array (each string must be condertible to array type),
ist and Map (both populated by ctrings by default).
ÆY ¦  YY Y Y
ÚY ¦ Y   YYY"Y 6Y YY Y YY  Y YY Y
 Y
ÚY ¦ Y   
 Y  Y  YY Y Y Y Y # Y"Y£Y YY
   =Y Y Y
ÆY 5
YY YY Y    =Y Y YY YY Y  YY Y Y #Y 6Y
 Y
ÆY £  YY   Y YY Y Y Y YYc Y Y
ÆY £  
YY   Y Y Y Y YYc Y Y
ÆY   Y YYY
YY Y YYY Y Y Y Y
Y Y  Y&Y
Actionclassname-condersion.propertiesYY Y Y   Y Y-Y4 
 1  
 YY Y    =Y Y Y Y
 Y Y Y
ÆY ¦Y  Y  YYY
3.#  Y1,maidenames.mary,Y  1, Y6,+-Y
YYYYYYYYYYYYY Y
3.#  Y1,maidenames['beth'],Y  1, Y6,+-Y
Y
ÆY £YY  Y
 =YY  Y$
YYY Y#Yc
¦  Y
Y  Y Y Y  c ')YY ¦c ')Y

ActionContext

ÆY £Y Y Y Y


Y Y Y YY
cY
cY  Y Y Y Y Y
 YActionContextY
ÆY £Y Y Y 6Y Y YY
cY
ÆY JY  Y 6Y#  YY  Y YYYY Y
cY YYY
 YY Y
YY
ÆY ¦ Yô #Y Y YY YY  YY Y   Y  YY Y
!
Y 
 Y Y  Y Y  YYY Y Y  YYY
ô YY Y  Y  YY YY  Y Y
cY
ÆY ¦ Y  Y YYô #Y Y YYY  YYYY
  Y YY !
Y  Y Y Y !
Y
!
Y YY !
Y 
Y
c YY YY Y 
Y
ô  Y YY  Y 
Y
ô Y 
Y Y
YY 
Y
Y
Y YY !
Y Y Y  Y
Y

cY  Y Y Y     Y
Y Y Y !
Y
ÆY ÿY
Y
cY Y YY Y Y Y Y   Y Y 6Y#  Y
 YY#   YYYY    Y Y
ÆY ¦ Y>Y  Y Y 6YY
YY Y Y Y Y#YY Y    Y
 Y Y   Y Y YY Y#  YMsession[͚user͛]Y
ÆY ô YY Y Y Y.Y ] 9Y   Y  4Y
ÆY   YY Y0(?2Y
ÆY ]9YY =Y 4Y
ÆY   YY  YY>07*.* *Y7*.*#=*2Y
Y

ctruts2 ¦ags:

ÆY c
YYô JY  Y
  YY  Y Y 
Y YY
ÆY c
YY  YYY    YY&JYY  
YY
ÆY YY
YY YY# YY Y Y
cY+ YY
Y Y Y
cY
ÆY JY Y 
Y YYYc Y Y Y
Y Y Y Y 
Y Y Y
 Y$c YY
Y   YYYc Y   YJYY 
Y YY YY Y
Y Y Y
 Y 
Y Y   YYY 6Y#  Y
ÆY 5
YY YY Y 
YYY   YYY 6Y#  Y
 Y Y
Õ expression}Y$c¦Y4Y@0#  2Y
ÆY Data ¦ags:
ÚY Property ¦agY"Y&Y Y  YY  Y Y Y  Y<¦YYYYYYYYYYYYYYYYYYYY
3.propertydalue1,
 
 å Y
ÚY cet ¦agY"Y&YY YY  YY  YYY
3.setname=,
 ,Ydalue=,
 
 ,+-Y
Can specify scope ʹ application, session, request, page or action. Default action Y

YYY Y  Y YY>
 Y
ÚY Push ¦agY"Yô  Y
YY
 Y   YY YValuectackY
ÚY Bean ¦agY"Y Y YY  YYYY
 Y5
YY YY YY YY

 Y YY
cY¦ Y
Y Y  YY Y
cY Y Y
 YY Y
Y
6 Y Y YY  Y YYY YYY  YY  Y  YY YY
Y ô #Y£YY Y
 Y Y  YY

r 
  Ú
 d  Ú
 
r  Ú  
   r 
r 
Ú  r Ú
  Ú
   
ÚY Action tagY"Y¦Y Y  Y Y Y  Y  YY
Y
Y
Y
ÆY Control ¦ag
ÚY IteratorYYr  d  Ú     Ú Y
ÚY IfYYelseYY
ÆY RYYYY
YY
  Y  Y Y YYY Y
ÆY ¦extYY"YJY
YY  Y 
Y  Y#Y Y 
Y
 Y
ÆY I18n Y"Y
YYY 
Y
 Y
Yÿ
 Y Y
Y Y Y
 YY YY

  
ÆY ôYY   YY 
Y 
Y  YY  Y Y
YY Y 
Y 
Y
  Y"Yfor an entire packageY
ÆY £ YY Y 
YY  Y Y Y   Y
Y YYY 
YY Y
 YY YJYY 
Y  Y YY Y
Y Y Y
Y Y  Y YY
Y 
Y
ÆY 6Y  Y Y 
Y Y YY  Y Y 
Y
Y Y 
Y Y

rglobal-results>
rresult name1,  ,-+  
+4   3+ 
-Y
r global-results>
Y
ÆY  Y Y 
Y.Ydispatcher, redirect, redirectAction
Y

Y Y
Vaa 
 am   
Y
ÆY YY Y Y YY  Y   Y Y YValidatorYY 
 YY Y
 Y Y  YY  YYY  Y Y  Y
ÆY ¦  Y Y Y YYY  Y   .Y
ÚY  YY"YYY Y
ÚY   YY"Y
YY Y   
 YY   Y  Y  Y
ÚY   Y"Yô
 Y  Y Y  Y  Y
ÆY   Y  Y YY
YYValidationAwareY  YY Y  YY Y
   Y   YY 
YYY 
YY Y Y
ÆY Y Y   YValidation InterceptorY Y
YY Y Y YY  Y
   Y
ÆY 5
YY
Y Y  YY  Y   Y  Y£ Y
Y
Y
cY
 Y Ydalidation and workflow interceptorsY Y Y Y  Y   Y
Y Y
  Y Y
Y Y  Y Y  Y   YY¦ Y Y Y    Y
  Y
Y Y Y YYY Y
Y Y  Y Y ')Y Y£ Y Y
Y YY    Y   Y Y Y  Y YY Y Y Y Y Y
 Y¦ YY YY
ÆY   YY
YY Y YY%Y YYactionclassname-dalidations.xmlYY
 Y Y YY#YY Y Y Y
Y
rdalidators>
3field name1,
 ,-Y
3field-dalidator type1,stringength,-Y
3param name1,# ,-A3+ -Y
3param name1,  ,-B3+ -Y
rmessage>
£ Y$ username}Y YY YYY Y
 Y
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Y Y$ minength}YY$ maxength}    Y Y
r message>
r field-dalidator>
r field>

3  Y1, ,-Y
Y 3    Y1,requiredstring,-Y
Y Y 3-5
Y
Y YY
Y Y 3+-Y
Y 3+    -Y
Y 3    Y1,email,-Y
Y Y rmessage key1,   ,+-Y
Y 3+    -Y
3+  -Y
Y
Y
3dalidator type="expression"-Y
Y 3param name="expression"-
 YC1Y  3+ -Y
Y 3-& YY  YDYY Y3+-Y
3+  -Y
r dalidators>

Y
Y
ÆY   Y  Y Y  Y Y YY   
 Y  Y
ÆY £YYY
Y3    -Y Y  Y3  -YY  Y  Y  Y
 
Y Y Y YYY
ÆY ôY
 YY  YYY  Y
ÆY 3-Y Y Y Y#YY  YY
ÆY 5
YY Y  Y  Y  Y YY Y  Y YYY  Y
  Y
ÆY ¦ Y  Y YY Y  Y YYY  Y Y YY  Y
Y
ÆY ¦ Y
 Y  Y Y YY YYY  Y  .Y Yexpression
  Y
ÆY ¦ Y

Y  Y  Y
YYYY 6Y#  Y Y Y Y  YY
 Y  Y
Y  YY  Y
ÆY < YY 6Y  Y Y
cY
ÆY 6Y Y Y%Y Y
Y@Y YYEY Y  Y
Y
ÆY £YY#  =Y YY Y 
Y
 Y

£riting a custom dalidator:

ÆY ô Y  Y Y YY  Y YValidatorY YFieldValidatorY  Y
ÆY    Y  Y Y Y YValidatorcupportYY
FieldValidatorcupport


 Y Y   J   Y#YFieldValidatorcupportY0Y
Y
Y public doid dalidate(ºbject object) throws ValidationExceptionY0Y
Y Y c Y  6Y1YgetFieldame();Y
Y Y c Y  
Y1Y'c )YgetFieldValue(fieldame, object );Y
Y Y getcpecialCharacters();
Y
Y Y Y'YC     ')Y)Y0Y
Y Y Y addFieldError'Y  6Y Y)8Y
Y Y 2Y
Y 2Y
pridate ctring specialCharacters;
Y ++ YY Y Y
2
ÆY ¦ Y  Y Y Y Y Y ')Y Y
ÆY   Y
Y Y Y$ÿY   YY Y Y Y  Y Y 
Y
Y#YY Y
 Y

3    Y1,passwordintegrity,-Y


Y 3 Y1,specialCharacters,-@C/>F3+ -Y
Y 3-Y
Y Y 5
Y  Y
Y YY  YY
 YYYYY
 Y  Y,@0     2,Y
Y 3+-Y
3+    -Y
ÆY £Y  Y
Y Y
Y  Y YY  Y  Ydalidators.xmlY YY
 Y Y Y Yroot of our classpathY

rdalidators>
Y 3  Yname1,    ,Y
Y class1, 
    J   ,+-Y
r dalidators>
Y

ÆY chort-circuiting dalidations:
3    Y1,   ,Yshort-circuit="true"-Y
JY  Y  YY Y  Y Y
  Y  Y  Y Y Y  Y Y
Y  Y
Y
ÆY  Y 1*
*Y"Y  Y  Y

J

a 
a a 

ÆY $Y
 Y Y    = Y Y 
Y Y Y Y 
 YY"Y
ResourceBundleYYocaleY
ÆY 
ÿ
 Y YY    Y Y
ÆY ¦ Y 
Y Y Y
Y Y Y
ÿ
 Y YY#Y
ÆY 
ÿ
 Y YY Y Yc
 YY
ÿ
 YYY  Y

Y YY Y Y Y
ÆY Y Y
Y
 Y Y  
ÿ
 Y  Y Y Y 
Y
 Y  Y#Y   Y Y
ÆY £Y 
Y YY   Y Y Y Y 
  Y  YY Y#Y

Y
ÆY   YY Y
 YY
 Y  Y YY Y   Y Y Y  Y Y
Y Y
 YY YYY  Y
 Y
ÆY $Y YY Y   Y  Y 
Y
 .Y

 Y
 Y1Y Y 'Y, ,)8Y

ÿ
 YY1Y
ResourceBundle.getBundle'"EmailClientMessages",currentocale)8Y
c Y   Y1Ygetctring'Y,  ,)8Y
Y
ÆY < YYÿ
 ')Y Y Y  Y   Y YY
Y"Y Y Y  Y Y$Y
   Y Y Y Y Y
 YY  Y Y Y  Yô Y Y Y Y
  Y Y$Y Y   YY Y
 Y
Y
ÆY c
Y Y
YY Y
Y YY Y  Y
ÆY c
Y
  Y Y
ÿ
 Y Y
Y  Y Y  YYY
   Y  Y
 Y
YY
ÆY ¦extProdiderY  Y#YY Y Yget¦ext()Y¦#   YY
Y
YY Y YY YY#Y Y
ÿ
 Y Y Y Y
Y
ÆY ¦    Y Yô c
 Y  Y
Y   YY¦#   Y
ÆY JY
Y Y#Yô c
 Y   Y
 Y¦#   YY Y
cY
ÆY 
Y   YY¦#   Y Y Y
ÿ
 Y Y YY
 Y Y
Y YY  YY  Y  Y
ÆY < Y Y YY
YYY  .Y
ÚY Y
Y Yimplement ActioncupportYY
ÚY
YY   Y Y  Y YYY
YY
Y   Y
Y¦#   Y
ÚY c Y
YY Y
YY  Ytext tagY YY  Y Yget¦ext()Y
 Y  Y Y 6Y
ÆY 
Y¦#   Y
ÿ
 Y  Y   .Y
ÚY ActionClassY"YJY  YY
ÿ
 Y  YYYY Y Y FY
ÚY MyInterfaceY"YJY
Y Y  YY  Y Y  Y
ÿ
 Y
 Y  Y Y  FYJY Y Y   Y Y  YY
J    Y
c
  YY Y  Y Y YY  Y   Y  Y Y
  Y  Y Y Y Y
  Y
ÚY MycuperClassY"YJY
Y Y#YY
  Y Y  YY
ÿ
 Y
 Y  Y Y
  FY
JY Y Yc
     Y Y Y
  Y YYc
  Y
6Y Y  Y 
Y
Y Y
  Y  Y Y Y YY  Y

ÿ
 YY Y   YY  YY Y Y Y   YY
     YY Y
ÚY JY Y Y  YModelDridenY Y YY Y Y Y  Y YY

YY Y
Y
ÿ
 YJY
Y Y Y&  Y Y   Y Y
 Y&    YY Y Y YY  Y  YY
  Y
Y  Y
ÚY package.propertiesY"YJY
Y
Y Y Y   (( <Y Y
   Y YYY YYpackage.propertiesY Y   ((YY
Y Y Y YY
ÚY Domain model object exposed on Valuectack referenced by key Y¦ Y Y   YY
>GY  Y YYY
 YY
 
 Y Y Y
cY YY
  Y#YY YY
 Y Y Y YY Y  Y YY
YY
Y
ÿ
 Y Y  Y YY Y Y
 Y
<   Y   Y YY Y Y
 Y Y Y YY Y
 Y Y YJY  Y  Y Y YY
 
 YYY
 Y
  Y Y
cY'YY& )Y Y
ÿ
 Y Y
 & Y  Y  Y Y&    Y YY  Y YYY
  YY
 YY
 
 Y
ÚY DefaultResourceBundles"Yc
Y  Y
YY Y  Y
 Y Y Y
 YY  Y
ÆY  Y  Y   Y Y Y  Y Y
YYY Y 
Y
 Y Y
#Y YJ    YYc
  HH&c   Y
J    YY Y
ÆY Defining Default Bundles
ÚY JY  YY Yc
Y Y
Y   Y Y
Y
Y
Y Y  Y Y
Y Y
ÚY ¦ Y   YY   Y  Y
Y  YY YY Y
Y   Y Y
  YY
Y Y Y¦ Y Y Y  YY
Y
 Y
ÚY ¦ Y Y Y Y Y   Y Y YY  YYY
ÚY 
Y
 YY YYY 
 YY  Y
 Y
ÚY ¦Y Y YYY Y
Y
 YY Y   Y
Y
YYYY
struts.custom.i18n.resourcesY  Y
ÚY 5
YYY Y Ystruts.propertiesY Y Y  YYY Y YYY
Y
 
 Y Y


 (A 
1   
   ÿ
 Y
Y
ÆY   YY Y
Y
 .Y
ÚY textYY
ÚY get¦ext()Y Y 6Y
ÚY keyY 
YY&JYYY
ÚY keyY YYmessage elementY Y  YY%Y Y
ÆY &Y (AYYY YY
ÿ
 Y Y YYY YY
ÆY 5
YY  =Y
YY#Y  Y 6Yÿ
Y  YY
Y@YYY
!
Y YYEY
Y
ÆY ô Y  Y
Y
Y 
YY#Y Y
Y 
Y
 Y
Y

Y
 Y YY####   Y  YY
 #YY  Y¦  Y
YYY

Y
 YY YYY Y !
Y  Y Y
 Y
Y
Y
ÆY    Y
  Y  Y
Y  YY Y YY Y !
Y  YY
ÆY ¦ Y   Y YY Y Y<¦¦ Y  Y Y Y !
Y
ÆY ¦ Yi18n interceptorY YYY Y Y !
Y YY  YY
request_localeYJY Y  Y# Y Y Y !
Y Y Y
Y YYY
ô #Y
Y  Y Y
Y  Y  YYY Y   Y
ÆY 5
YY
Y Y  YY Y
 Y YY  Y    Y
ÆY ôYô #Y# Y YY  Y !
Y Y
 YY Y !
H  Y  Y
Y (AY   Y Y Y Y Y YY 
YY
££_¦RAc_I18_ºCAEY
Y

a  

 
a 
amm  a 
Y

ÆY JYc
Y(Y  ô Y  Y
Y Y 
 YYYY  Y
 Y YY  Y YJY
c
YY Y Yô YY
Y  Y Y
  Y¦Y
Y Y
  Y YYY
 Y  Y Y  Y Y   Y 
YY Y#
')Y Y Y YYY
 Y Y Y
ÆY £YYY Y  Y Y Y Y Y Y YY Y Y 
Y Y Y
 YôY Y Y YYYY Y Y Y Y Y Y Y Y
¦ Y  Y Y Y YY Y Y
# Y Y

3 Yname1,& ,Ymethod1,,Y 1, & ô ,-Y


Y 3 
Y1,
,-+
 3+ 
-Y
3+ -Y
0JY
Y YY Y Y Y Y Y
Y 
YY 2Y
 Y Y  Y"Y Y 
Y
YY Y
3 Yname1,ser,Ymethod1, 1},Y 1, & ô ,-Y
3 
Y1,
,-+
 3+ 
-Y
3+ Y
Y
ôY
YYY Y Y  Y Y Y YY  YY Y Y¦ Y  Y Y
 Y Y Y Y Y YY
 
Y Y Y Y 
YcY Y Y !
Y
&Y Y,& ,Y Y')Y Y Y Y& ô Y Y YY Y YY YY

 Y Y0(2Y
Y
Y
Y


  
a  mm 
Y
Y  Y Y YY  YY
 !
YYYYY Y  Y
Yc Y Y
 !
YY Y Y
 Y Y
Y
Y YYY
 Y   Y
Y£ Y Y Y Y
 Y Y YY Y Y
YJY YYYY Yindalid.tokenY 
Y Y 
Y
Y
3. -Y
rs:token >
3.#  Y1, ¦,+-Y
3.
 Y 1,  ,+-Y
3+. -Y
Y
r Y1,  ,Y 1,  ,Y 1, ô ,-Y
rinterceptor-ref name="tokenctack" >
3 
Y1,
,-  3+ 
-Y
3 
Y1,indalid.token,-
  3+ 
-Y
3+ -Y
Y
Y

a
a a a ma a
Y

ÆY J  YY Y Y


 Y Y

3   Y1,  c,-Y


3    Y1,
c,Y+-Y
3    Y1,execAnd£ait,Y+-Y
3+   -Y
Y
ÆY 6Y Y Y#ô£    Y Y  Y YJY  Y Y#ô£ YY Y
Y   
Y YY Y#
 YYY
  Y   Y YY YJY Y
  YY Y#ô£ Y   Y Y Y Y Y#
YYY
   Y Y#ô£ Y Y YY
Y
Y
3 Y1,  ,Y 1,c  ô ,-Y
3    Y1,  c,+-Y
3 
Y1,
,- 
 3+ 
-Y
3 
Y1,wait,-   3+ 
-Y
3+ -Y
Y
ÆY ¦ YY   Y YY Y YY Y Ymeta tag in the head sectionY¦ Y 
Y
 Y Y   YY  !
Y Y&Y Y 
Y Y   YY Y YYôY Y
Y Y  YY Y Y Y YY    Y  Y Y 
Y  YY Y   Y
  YY   Y Y Y Y4
 Y Y Y   YYYY   Y 
Y
 Y 
Y Y  YY  Y Y 
 Y Y Y   Y
Y
3  -Y
3 -Y
3  - Y  3+  -Y
rmeta http-equid="refresh" content="2;url=rs:url >" >
3+ -Y
3-Y
 Y
Y !
Y Y  YYY
3+-Y
3+  -Y
Y