该用户从未签到
|
沙发
发表于 2014-03-12 22:26:39
|只看该作者
201. 1、继承ActionSupport,再写方法validateXxx() 其他同上一样
% J# g- e# D2 Y3 [2 j202. 2 Y; B2 ?7 q7 `
203.第二:xml配置进行校验 & q/ x7 r" y* F+ l8 k8 G
204.一、所有方法
8 T9 r8 z* d1 a. }; E& s( B- W# k205.1.继承ActionSupport类,校验文件与action同包 命名ActionClassName-validation.xml
8 w" u% n5 }7 U" d1 v* F/ a7 A206.
3 X- _ p- D7 K207.;
3 P, ?5 q" T- B8 b208.文件内容:
8 y- }: y$ X$ S( X; v, L$ i" V& s209.<?xml version="1.0" encoding="UTF-8"?> 0 K; Q" s5 u9 z+ K5 X2 S: I
210.<!DOCTYPE validators PUBLIC"-//OpenSymphony Group//XWork Validator 1.03//EN"
7 U1 c2 A: P* X# U4 M7 T211. ) W( b: e/ f+ A7 H9 J. q
212."http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> ; Z: A& i6 X9 {5 ?0 c/ n
213.<validators> , s X3 i! r6 P6 z4 Q
214. <field name="username">
9 w4 Z, } i6 F. n% p215. <field-validator type="requiredstring">
& n4 H. A$ |5 G/ V$ J216. <param name="trim">true</param>
5 y$ a6 K( E1 c2 X' M) \& F4 Z217. <message>用户名不能为空!</message>
; a! b- ? S( J w218. </field-validator> - X4 P( c9 s2 k$ _2 @
219. <field-validator type="tringlength">
' }% P. u) N9 M220. <param name="minLength">4</param> % P+ d' F) G2 H k& y
221. <param name="minLength">10</param>
# @5 o* ?1 g3 `222. <message><![CDATA[用户名应在4到10之间]]</message>
2 z$ i0 j: e* p/ `. q- ~223. </field-validator>
0 Z7 z% ~* J" U/ |: f( ]+ z1 G1 M; W3 i224. </field>
& B( y" v, j4 X, r8 ~9 y9 }225. <field name="mobile">
" m* m- r8 \- Q, o; g8 m- ?8 X226. <field-validator type="requiredstring">
' g) [( j, f) c8 [, U227. <message>手机号不能为空!</message>
. T% L$ a0 H& L- [228. </field-validator>
+ E9 w3 |; V$ x; e8 z229. <field-validator type="regex"> - c( |6 p9 [5 s' S
230. <param name="expression"><![CDATA[^1[358]\d{9}$]]/>
6 j" [8 R6 R2 C4 v$ j& g% I231. <message>手机号格式不正确</message> 4 C6 a8 _) [' R. Y4 M
232. </field-validator> 2 @" ]4 I3 r1 d( v5 c( x; m
233. </field>
8 |) T) f5 `# s1 F4 v234. <field name="age">
_7 N( b/ N' f( T5 X; X235. <field-validator type="int">
* G. t5 j z# B% u6 w! \236. <param name="min">1</param> / O4 N$ U* d/ l5 Q {; M' {) r, n/ G
237. <param name="max">150</param>
h, R& ?) V+ l238. <message>年龄范围不对!</message>
# e6 o( O# Q9 P4 \239. </field-validator>
- c' C/ [7 @0 Y, E( r3 D# D* `240. </field> " d9 ^. `2 R" ]9 p1 g
241.</validators> s- \% E; F/ \! ~: y
242. ! H1 g: Y- E7 U6 K ^0 h A
243.校验器的路径:com.opensymphony.xwork2.validators下的default.xml中
1 W( `& y5 ?7 G8 o244.二、指定方法
+ f" e! v! B" j% M, ~" Y: ~245.文件命名:类名-配置中actiono的name-validation.xml
2 V' _: x& _, L. y6 r$ p5 P246.
' }# W9 W* V* G' x; ~- y7 `247.15.国际化
, z) ^( y) B& \* b248.全局范围、包范围、action范围 ( r! [2 _, N: S$ H
249.命名格式:
& a m B; a& @2 L7 w( N6 `250.baseName_language_country.properties
- ?& g# x6 N4 C1 m; [( |% M% u251.baseName_language.properties
$ |! C4 |7 R$ [; n252.baseName.properties 8 S, D, T# \8 x- K! S+ z2 P
253.baseName是资源文件基本名可以自定义,language和country必须支持java的语言和国家
' z# j1 a* F) B. k5 }# ?* u254.中国baseName_zh_CN.properties
# H1 r/ G: K" u. T# Z# b# w255.台湾baseName_zh_TW.properties / H6 W+ B) k. {) k R% S y
256.美国baseName_en_US.properties
& H' `/ F% _: i& j. j& x257. 1 k6 G2 y% b+ D/ M
258.在properties中MyEclipse支持自动将中文转换为Unicode编码
$ q9 v( y' g1 y2 S0 ?, t, }7 J259.利用jdk提供的native2ascii命令格式转: 0 W+ P* J0 Q* W2 }
260.native2ascii 源文件.properties 目标文件.properties ; R8 t) y- }* T4 O, ^
261. ' ]2 [$ X: T8 Y# k9 r/ A" m8 G
262.通过在浏览器中改变语言就可以再语言间转换
3 l5 P0 s1 |2 d( a( _! l4 Q263.一、全局:<constant name="struts.custom.i18n.resources" value="资源文件基本
! r9 h# @! F' Y0 @, R264.*在jsp页面是用<s:text name=""/>标签来输出国际化信息 name为资源文件中的key
" f/ y) { [3 K8 {9 u6 x265.*在action中可以继承ActionSupport 是用getTest()方法得到国际化信息名"/> 第一个参 4 {8 ^/ [* x. H. I% ~4 x" H) p
266.
1 T, \( H, A4 T: S, q8 @ ?267.数为资源文件中key
% u6 o7 N p' b B8 w268.*在表单标签中,通过key属性指定资源文件中的key 如:<s:textfeild name="" key=""/> 4 @4 y+ U) v: b/ M# H
269. % n( D3 j3 V$ i* j. r
270.有占位符的表示:
- v1 R: j# x" U" I* s$ W" S4 f; y271.welcome={0},欢迎光临!{1} * o0 ?0 A/ U; C8 ^
272.*在jsp页面:
: A' f" }% U6 l9 n273.<s:text name="welcome">
1 L5 N: k6 ?! L274. <param><s:property value="realname"/></s:param>
8 d7 v- B$ Q0 ?7 Q- V275. <param>学习</param>
" p4 F" m9 a/ p4 [% \) {0 i. L276.</s:text> A0 ^# o+ ?' N" w5 B
277.*在action类中: # l) m9 o! V. ?$ A
278.getTest(String key,String[] args)或者是getText(String aTextName,List args)方法
& x6 E! R* Q" e2 X279.
0 Q" R+ |3 }" {8 O6 D$ }5 f, _280.二、包范围
+ G" E7 c, q/ `% a$ s2 d4 v281.在包下放置package_language_country.properties资源文件 package为固定写法 8 w$ j: h2 D6 {* L6 G
282.该包及子包下的action毒可以访问该资源 系统会先找包资源文件 找不到则找系统资源
/ H, `& @/ }5 M4 f# k4 J; t/ `283. 3 a0 i/ K5 O3 t+ Y4 l5 z$ ]
284.中的key
: \# m' \/ c1 f {3 M# E: R2 ~285.
) |" j, P' ?8 L& T7 ^; x1 D% \! \/ Z286.三:action范围 5 ^( ]) c: m- L, f: G
287.在action所在路径放置ActionClassName_language_country.properties的资源文件 ( u( m$ F% Z& `
288.
0 Y( Z9 S3 u) ~289.无需任何配置直接从资源文件中获取配置:利用标签
( B. M+ Q- R+ O290.<s:i18n name="资源文件名"> 全局
2 Y3 W% F1 ]- v2 G! |( p291. <s:text name="welcome">
- N5 K# }2 G8 K" j4 q+ ]292. <param>小张</param>
- X2 V q! { x' S) L293. </s:text> 7 Y3 k7 m. f9 |2 T" h8 ~: S
294.</s:i18n>
: @# | N' J. j295.<s:i18n name="路径.package">从包中
2 X: H: Y0 M0 y" R2 ]) N296. <s:text name="welcome"> " N, K$ ?5 f3 E1 J! g$ v. q
297. <param>小张</param> * k) | r- ?; u7 p0 O, E
298. </s:text>
) D- t0 S4 m( Q+ V" r" G7 U8 }0 M) G+ i299.</s:i18n> $ ?' P$ z9 R) D1 P: U7 o: L* z
300.<s:i18n name="路径.ActionName">action 2 D- \2 I; [. t2 @& c8 \
301. <s:text name="welcome">
# |$ j3 D! }4 U302. <param>小张</param> 8 f! V% }% b- Q( o
303. </s:text>
( n: u7 K' q' K+ K% ~4 T304.</s:i18n>
* F+ \% U$ _9 J/ J! u305. 9 A; E1 _4 l: A- E% r$ V! U
306.16.OGNL表达式语言 4 y) M- S7 J, W, L: s- \" U
307.类静态方法调用格式: ) k( @# [) U# [3 P) w
308.@类名(包括路径)@方法名
% H, E4 w, i5 T% `: {309.
, S% }! v u2 X4 O310.OGNL Context(ActionContext)访问上下文中的对象:session、request、application、 8 T, S8 i5 F& J/ x! H, f: J$ b! E
311.
/ d4 {/ j) x7 F' r/ c0 z- E312.attr、parameters、OgnlValueStack
5 m0 |5 k* v2 s1 q313.访问对象格式:#session、#request 5 q# j4 F6 p* O" {
314.访问对象属性格式:#session.userName或者#session['userName']
0 S4 J1 Y$ j, d% ~2 Q4 p3 X( ?315.其中OgnlValueStack root变量无需#,他访问对象属性时从栈顶开始找
g! C6 h, k' `) ?316.需配合struts2才能使用,也可以用EL表达式(只能访问值栈中的属性)直接访问对象的属性 ( i- j% v; I" [
317. 7 C. y- b* T O/ Y
318.17.常用标签使用 z" y" L- |# ?6 M+ C- w
319.*构造list对象:
: E% ~6 {: O }; m2 O7 R2 U% t# p320.<s:set var="list" value="{'1','2','3'}"/>
' A F) m/ I; W321.
" Q/ @; y3 ~ D" `8 c" F322.*迭代list:此标签迭代时将当前对象放到栈顶
* W& c' E s2 o9 ]" Y5 ~! J4 U323.<s:iterator value="#list"> 2 ]0 ]2 Q& Z5 c
324. <s:property/>
# s# D% M2 e* J3 ~325.</s:iterator>
3 G4 q, O& }( [- C, y) a; w326. 6 I; c* ^. a% h/ p5 v ^
327.*构造map对象:
- l. V9 ~) A4 t) |328.<s:set var="maps" value="#{'key1':90,'key2':20}"/> + b K$ Q" L1 ~2 a+ g* \" A" {- O7 j
329.*迭代map:
! q1 A5 O5 w4 M. j1 t7 j330.<s:iterator value="#maps" status="obj"> . s# C+ f3 C; n0 G5 W
331. <s:property value="key"/>=<s:property value="value"/> % _+ j% X& x/ Y" |8 {
332.</s:iterator>
% \! f9 x! @+ l1 D333.obj包含方法:
6 }/ V' R Y, {3 c) V334.int getCount();返回当前迭代了几个元素
/ p* C+ ]9 I; Z5 J1 X' v$ R335.int getIndex();返回当前迭代元素的索引 3 T7 r" D! L2 f; X5 E7 `" k
336.boolean isEven();返回当前使用元素索引是否为偶数 ) c! i8 d% G/ Z
337.boolean isOdd();返回当前元素的索引是否为奇数
; ?* m' f) f+ X) R" y j; D338.boolean isFirst(); : f9 Q# x* A& n' K, p% l
339.boolean isLast();
! [ F8 w3 p- }5 }340.
4 s& M, j# s' j4 e0 l0 u341.*判断元素是否在集合中:
5 |! I4 b Q0 _, v1 j1 f342.<s:if test="foo" in/not in {"foo","tar"}>
7 d1 N" n; N7 d4 E" h0 ]343.在 6 _7 D, u* l3 {& ^0 t3 L* G: E: h
344.</s:if>
0 M; k; h# s2 L. I345.<s:else> ! }, b+ G+ U. s' q) d
346.不在 * c$ P" [6 t4 I# ~
347.</s:else> 5 k) J$ b- V: o0 F% M7 M7 ]
348. - a# f6 H: P- P6 B S+ H3 m5 k
349.*投影 在大集合中过滤数据放到小集合 例:Book对象 5 v+ K. _4 Y6 L4 Z* d% X
350.?表示获取符合逻辑的元素 ( p& l* }( q% y
351.^获取符合逻辑的第一个元素 3 N! X$ q" w8 Y5 I" C6 e
352.$获取符合逻辑的最后一个元素 6 Y4 I* d7 S; u) C8 v1 z
353..{}表示从大集合中筛选到小集合 , h6 T: k( h1 B0 r8 w% Y/ T
354.<s:iterator value="books.{?#this.price>35}"> ! A8 s' ^+ b5 u$ Y9 m& Q
355. <s:property value="title"/>==<s:property value="price"/>
1 B8 A, E0 D8 \- _356.</s:iterator>
( B$ F! h5 }0 {7 Y$ `' }* K! T9 h. l357. 7 T7 @: D( o" H
358.*URL标签
, W' K$ W* b" n/ a8 H4 M359.<s:url action="" namespace="">
. z/ M# ^$ I# _360. <param name="" value=""/> * J- u# N- q+ C# ]2 s
361.</s:url>
7 f8 I' I! F" N& n2 A: z362. * O* V: B5 t+ q- y7 _* a
363.<s:set name="myurl" value="www.baidu.com"/>
% Z% q( i3 f, l, j. ~4 e364.<s:url id="url" action="hello"> 7 S9 X Z3 i( k S: d" \* C
365. <s:param name="request_locale">en</s:param> . C e. z8 @2 X9 K
366.</s:url><s:a href="%{url}">English</s:a> P- E6 A* F3 j8 l/ W- @
367.如果href="#myurl" 他会把他当做字符处理 要这样:
, ]. E2 J$ e+ ^368.<s:a href="%{#myurl}"/> ; l" R9 ^4 f/ d; t% K0 t( k8 y
369.
( v+ q+ h( E0 N; I370.*复选框 集合list和集合map
5 u- Y. {* a R H( r$ B6 ^! R371.集合list
$ X& r6 P4 m7 O9 a372.<s:checkboxlist name="list" list="{'java','c#','c++'}" value="{'java','c#'}"/> : `2 F! o) F0 i p( D
373.value属性用于指定被选择的复选框 & s' C3 e5 I6 Q/ @; O7 a
374.
- q, Y5 d- q: h S+ D( y375.集合map $ V+ Q( D. T/ T8 s* n5 ]: a3 _ l
376.<s:checkboxlist name="map" list="#{1:'java',2:'c#'}" listKey="key"
( O8 x' @; X6 d" T; x377. 2 Y& K2 g! K& Q. h5 t" c$ g {
378.listValue="value" value="{1,2,3}"/>
+ y2 K' G y/ M" F- w379. ( U7 z& \* c( `! Y
380.*单选框 & _6 R. J2 B0 U0 Z/ {: W. \5 R
381.集合JavaBean
% E. ?+ g" p# `+ z ]! Y382.<s:radio name="beans" list="#request.persons" listKey="personid" % `" L. }1 N! r, g& w
383. ' l# b# U5 Y0 M# t5 E
384.listValue="name"/> $ z4 z8 \. A6 V1 E/ R
385.集合list
& l! i8 k _$ t6 `8 k/ [& e386.<s:radio name="list" list="{'java','c#'}" value="java"/>
; }4 W3 a" h" G1 H; k# p8 H387.集合map M- e# Y* G* s6 ?* @
388.<s:radio name="map" list="#{1:'java',2:'c#'}" listKey="key" listValue="value"
2 d3 ~4 b/ z9 F- _8 D0 X' ?389.
# |3 W& o$ u. j! `390.value="1"/> + B7 C& g$ X: p
391.
" e- ?; g! j8 u7 k' `392.*下拉列表框 5 G' i2 Y7 Y `' e& y
393.<s:select name="list" list="{'java','c#'}" value="java"/>
+ Q* f5 e8 `- H9 |9 z2 o394.<s:select name="beans" list="#request.persons" listKey="personid"
7 d5 h. R9 E4 o1 P395. w w2 g! h% J) p J
396.listValue="name"/>
% J2 A) T3 V! ?- \1 r- N7 t397.<s:select name="map" list="#{1:'java',2:'c#'}" listKey="key" listValue="value"
, ?1 v/ Y: a2 ~- l- v398. % Z- S% e/ s" S6 c! h. S. b
399.value="1"/>
$ G- B. p+ v+ j8 Y3 p3 B J" ]2 d400. 1 Y) i+ J1 v E; e. L2 e* n8 L4 k
401.18:防止表单重复提交
2 S( q5 g1 {8 r$ N, e! l( V1 v402.<s:form actio="" namespace="" method="post"?
; f4 L) [" G3 N3 |4 e403. <s:textfield name="name"/>
7 `" m/ |" ^3 R' W' \/ A404. <s:soken/>
3 K9 V3 x. e$ Y* L" C3 O405. <input type="submit" value="提交"/>
. h h" ~- n c0 A/ b$ r406.</s:form>
! r) S" `1 ?3 W2 M0 i3 \0 x1 w7 ^407.引入拦截器 1 `$ R: O, U2 T. h( p
408.<interceptor-ref name="defaultStack"/>
, j8 `% ]( I9 K. x! U/ s+ l409.<interceptor-ref name="token"/> 4 ^( ~2 {" V8 J2 S
410.<result name="invalid.token">index.jsp</result>///发现表单重估提 |
|