该用户从未签到
|
沙发
发表于 2014-03-12 22:26:39
|只看该作者
201. 1、继承ActionSupport,再写方法validateXxx() 其他同上一样 , v9 d4 ^+ F3 K7 m" V8 Q
202. ; s, m2 @! X# P6 z) ?) D7 c! q3 A
203.第二:xml配置进行校验
, Z, w% S6 t1 d- w* |6 u6 H204.一、所有方法 2 }1 R4 ~6 P* [0 k' j3 z
205.1.继承ActionSupport类,校验文件与action同包 命名ActionClassName-validation.xml 4 J) q9 ~* H6 I9 N& }: K, R
206. 5 F+ w2 o$ t8 v
207.;
- d& i2 {% q/ _# x7 d208.文件内容: * N3 R1 N! ~. N5 M. l4 Z0 F
209.<?xml version="1.0" encoding="UTF-8"?>
" _2 z. d3 A0 A+ E: J5 s210.<!DOCTYPE validators PUBLIC"-//OpenSymphony Group//XWork Validator 1.03//EN" 4 I' j# y2 d* K
211.
8 f+ V$ q0 F W, d212."http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> 2 }- M7 R9 p9 q# f* S2 s- l
213.<validators>
! E `4 g- T, T! F7 H214. <field name="username"> # I9 C5 o! s( |; b3 E" {! H2 Y0 r
215. <field-validator type="requiredstring">
* v, b7 @- H5 q9 v h3 H216. <param name="trim">true</param>
7 x% |7 s# G/ j" W7 C" `5 Z217. <message>用户名不能为空!</message>
1 U2 n8 X, ?2 {$ ?218. </field-validator> 1 M, N$ k/ S3 D
219. <field-validator type="tringlength">
; J6 x( Y2 l, O. p* J220. <param name="minLength">4</param>
+ d$ j0 ~# h( z1 L) Z221. <param name="minLength">10</param>
. Z0 ^$ A; L% m( y% A7 ]222. <message><![CDATA[用户名应在4到10之间]]</message> $ S; r5 O$ J" v; j; z
223. </field-validator> & p2 p2 j- Z) A; p
224. </field>
, b2 B' J" e6 ~" C6 A! ^225. <field name="mobile"> & |+ s5 P" o: t: p5 c
226. <field-validator type="requiredstring"> $ f. i8 E/ n/ X) E( k @
227. <message>手机号不能为空!</message>
* ^0 u, `. d; @( g% t0 {3 s/ N7 c228. </field-validator> 7 j& i T, b! L
229. <field-validator type="regex">
/ X3 C3 c2 W. N3 L# o2 s230. <param name="expression"><![CDATA[^1[358]\d{9}$]]/>
- t: f1 F! k. A' \) o231. <message>手机号格式不正确</message> - D; s \$ ^. Q( P. v% A: ~7 J
232. </field-validator>
" `8 j# {7 ~: E233. </field>
' d3 K# Z: u+ C' b234. <field name="age"> ; _$ a% |0 j% p4 V0 ]% w
235. <field-validator type="int">
( |; ^7 y+ t) s236. <param name="min">1</param>
6 ~) J/ B0 q# d: t: `, n" T237. <param name="max">150</param> . P$ j, m/ w7 e9 c" f
238. <message>年龄范围不对!</message>
9 `& i7 O( E3 l239. </field-validator>
6 n9 I, j4 j9 q240. </field> $ ?- x) {1 V7 a0 N: s
241.</validators>
: R2 k2 W6 d0 n# i+ N1 p$ X/ R242.
9 ~! ~3 Z* B& C7 m& | M$ \243.校验器的路径:com.opensymphony.xwork2.validators下的default.xml中 * ]* Q2 l1 k/ H7 @* r) _. i
244.二、指定方法 ; e) ]7 B" N9 T& [
245.文件命名:类名-配置中actiono的name-validation.xml
) ~( u$ f1 L' Z" m3 w |% U246. 4 d o4 l, R' A1 _- {5 M
247.15.国际化 , E6 p6 z' n' O7 I* E
248.全局范围、包范围、action范围 ) M- v; o. I8 E, a z9 m; b
249.命名格式: - `9 C' i1 O) H/ ~
250.baseName_language_country.properties
7 {& d6 r$ O9 |5 J: G251.baseName_language.properties
( W! \/ c& C3 K' G b; a252.baseName.properties
6 D5 ]8 R0 X a; B253.baseName是资源文件基本名可以自定义,language和country必须支持java的语言和国家
. q& o* F! f7 D254.中国baseName_zh_CN.properties
5 D6 ^$ ~9 Z( f X, c; b255.台湾baseName_zh_TW.properties - l+ F0 S6 ]' V# M' R: l
256.美国baseName_en_US.properties 0 M+ j( G/ l Y" A$ G. t2 t
257. $ z) j+ Y! k1 k2 J
258.在properties中MyEclipse支持自动将中文转换为Unicode编码 8 v3 |) v6 `3 A; N1 g
259.利用jdk提供的native2ascii命令格式转:
' I, m6 Y& }2 g! p& ]% s260.native2ascii 源文件.properties 目标文件.properties
6 D I9 {' P. K261.
2 r- B6 ]6 R+ B( j4 r262.通过在浏览器中改变语言就可以再语言间转换
w' B- _' M+ g4 x% Q8 ^263.一、全局:<constant name="struts.custom.i18n.resources" value="资源文件基本
# ]* e2 K5 a, `' |0 u+ x0 F264.*在jsp页面是用<s:text name=""/>标签来输出国际化信息 name为资源文件中的key : J Y1 j J, {' _: P/ s% ^( ~4 G
265.*在action中可以继承ActionSupport 是用getTest()方法得到国际化信息名"/> 第一个参
. m5 w8 i) m! _. ^' x- s266.
6 W- s8 r+ Q8 q& h$ b% C& ~6 W. R1 z267.数为资源文件中key 3 u) X/ [, p' X6 O; g
268.*在表单标签中,通过key属性指定资源文件中的key 如:<s:textfeild name="" key=""/>
2 A E: x0 P0 |8 o5 r3 R' x269.
7 j# `& {0 `' W3 \; U. c270.有占位符的表示: 0 l+ k ^, Z o) v; e ~
271.welcome={0},欢迎光临!{1}
6 k. J+ t# }- b3 a0 ^' ~, j272.*在jsp页面: " H, x; ?# G0 f1 D+ {
273.<s:text name="welcome">
4 d# p M/ B! x274. <param><s:property value="realname"/></s:param> a" y* `3 o: I& E) n5 s: i3 G( I
275. <param>学习</param> 3 a' ~6 R& w$ I; R: x
276.</s:text>
9 P' f2 Z$ v a# D) ^- \# H277.*在action类中: 4 s- V Z ~6 F! p; U
278.getTest(String key,String[] args)或者是getText(String aTextName,List args)方法 - t! R* L: A: i9 A, m' L8 \
279.
* z4 G4 U1 b$ f* P280.二、包范围 8 R% Z+ e9 m0 s2 a
281.在包下放置package_language_country.properties资源文件 package为固定写法 q _6 F! B Z
282.该包及子包下的action毒可以访问该资源 系统会先找包资源文件 找不到则找系统资源
! G3 _8 N. o+ I9 u- \& f283.
; {, n( c0 E' B9 Z1 U284.中的key 0 W" d! I2 [9 W: H+ ?3 C8 E' g
285. & S y4 z' Z) x% X5 q
286.三:action范围
! m" o, ^& X3 K287.在action所在路径放置ActionClassName_language_country.properties的资源文件
! _( c& _7 h$ i3 Z288. 5 M3 Q0 m3 d6 ^) n: D" U4 D
289.无需任何配置直接从资源文件中获取配置:利用标签
( I; ^2 q0 U& f290.<s:i18n name="资源文件名"> 全局 ( w+ g! p" W- C5 i4 g& q# H- k
291. <s:text name="welcome"> " a+ t2 Y$ R9 S3 `
292. <param>小张</param>
2 \/ ?2 e9 ]# o; H293. </s:text> 2 U5 `! \( j: ?+ U4 z
294.</s:i18n> f6 o: m# n/ j/ a# v* `) _
295.<s:i18n name="路径.package">从包中
9 Y, C( P, r* W. s296. <s:text name="welcome">
/ e/ f: v" g5 T2 W' E; C297. <param>小张</param> % }+ r0 d# x. t) E0 ^! A
298. </s:text>
6 X K1 p/ I# b299.</s:i18n>
Y* p3 p/ V7 h4 T0 a) z7 i300.<s:i18n name="路径.ActionName">action z* Q9 [, \, Z8 w8 O0 \. e) |+ d+ i
301. <s:text name="welcome"> 0 V2 n8 D* j+ P( i6 ^' W
302. <param>小张</param> : ~. B" i( U0 l+ o2 O3 V
303. </s:text>
8 z$ i7 \ L& T6 G9 D# o9 u304.</s:i18n> 0 w7 U E. X( y) G, c
305.
/ _0 o- j4 [3 s; g( `306.16.OGNL表达式语言 ) e2 D, O5 ~& s9 V9 Z/ u
307.类静态方法调用格式: 2 y' x" V* o- ?! z( I
308.@类名(包括路径)@方法名
P9 S# l9 { t' Z. ^309.
1 T* s3 z7 a3 @# j, z6 U310.OGNL Context(ActionContext)访问上下文中的对象:session、request、application、
6 A2 \$ ?3 R9 b9 c' x311. & r: c5 Y6 {+ W1 D" P' U
312.attr、parameters、OgnlValueStack
% g9 P" k; Z' t/ P! `0 T( g313.访问对象格式:#session、#request $ K" o, v6 M5 S- p. q
314.访问对象属性格式:#session.userName或者#session['userName'] # `3 h. {1 p T( J. y6 K& h5 a9 P
315.其中OgnlValueStack root变量无需#,他访问对象属性时从栈顶开始找
9 M7 J/ e! {, q* q6 n6 D316.需配合struts2才能使用,也可以用EL表达式(只能访问值栈中的属性)直接访问对象的属性 " l6 L7 f$ F7 ]* A o% c
317. _! _5 ?8 Q5 z9 t4 B
318.17.常用标签使用 1 Y6 w( Y8 Z+ \# _9 c
319.*构造list对象: 7 f8 H5 P: I) Z2 p3 p# ?+ S4 W
320.<s:set var="list" value="{'1','2','3'}"/> % ~9 A" u" R5 m" W8 V
321.
) Q2 N9 J# f; B322.*迭代list:此标签迭代时将当前对象放到栈顶
4 ^# S4 `+ r* T( P323.<s:iterator value="#list">
! d+ @: @! [/ Z% t9 h324. <s:property/> 5 T) c% e( {" ]2 o7 m( G
325.</s:iterator> $ G& j6 }! y ?
326. * d4 y T8 @4 x! ]' Q: k
327.*构造map对象: / [9 Y* v+ a8 E# y& L
328.<s:set var="maps" value="#{'key1':90,'key2':20}"/>
# z) r! N8 Q& H9 [329.*迭代map:
% b& _$ k5 f9 T7 R3 H8 M/ c+ L# ?1 q0 s330.<s:iterator value="#maps" status="obj">
3 B9 e1 h& ?2 p) V331. <s:property value="key"/>=<s:property value="value"/> $ l) Z) ?- R- w$ i) d8 K
332.</s:iterator>
@7 V* k* j9 t$ P R333.obj包含方法:
8 n, G& t* Y! R( A334.int getCount();返回当前迭代了几个元素 ! h f8 f9 p1 L! B9 I6 t
335.int getIndex();返回当前迭代元素的索引 ' @0 p4 I' R, t6 C) H# `
336.boolean isEven();返回当前使用元素索引是否为偶数 1 l) o* t* u; c! M& l5 I) f* C" |
337.boolean isOdd();返回当前元素的索引是否为奇数 ) q5 h9 v) U6 k0 H
338.boolean isFirst(); 1 H1 R2 L( D3 l+ |2 v- L, h/ ~1 Z6 M
339.boolean isLast(); 2 ^8 x# [8 d& E8 A* \8 R
340.
$ u( r3 M/ C9 b7 l( ]) W8 c5 S341.*判断元素是否在集合中: & L3 o) q7 Q) L$ {6 z7 ~
342.<s:if test="foo" in/not in {"foo","tar"}> 0 G) ~" z" |8 o7 e r) p7 k
343.在
5 q5 }$ ^: y+ P" |5 a344.</s:if> n. m+ X1 B7 U/ s: x6 y
345.<s:else>
3 `/ E- Q# p& D+ n; R9 Y' h346.不在
5 l6 e7 R& O( k0 Z8 e$ {347.</s:else> . y$ `, B9 T7 B, ^( g8 S4 X
348.
9 t5 i3 r( b. b) A349.*投影 在大集合中过滤数据放到小集合 例:Book对象
7 m I+ P$ [+ q350.?表示获取符合逻辑的元素
# B0 T# D% N5 @. y- c351.^获取符合逻辑的第一个元素 4 q3 f3 U( N- n$ T- r2 M" e
352.$获取符合逻辑的最后一个元素 5 y( x% p+ H _: y7 u
353..{}表示从大集合中筛选到小集合 9 H! @& n, u5 c6 M- E
354.<s:iterator value="books.{?#this.price>35}">
" {8 D) a4 ?9 D1 d# Q355. <s:property value="title"/>==<s:property value="price"/>
! k; U. C; F( `1 ?; x; d356.</s:iterator>
3 C Y$ ]# }) s2 b9 c357. ! Y& W, v+ ?7 e+ Z
358.*URL标签 ! } Y# M4 G, O7 K8 w6 a
359.<s:url action="" namespace="">
# _+ [' v, q; q7 o* c7 d8 @* I360. <param name="" value=""/>
- g% T3 ~2 _0 O' [ S9 O361.</s:url> 3 [1 `* B7 c; x/ y( p
362. 7 R' F, Z4 c/ Z1 N: ?9 O
363.<s:set name="myurl" value="www.baidu.com"/>
, |: r* ?( P, X" I, ]364.<s:url id="url" action="hello"> # u/ k; d7 W/ {( \4 O% F
365. <s:param name="request_locale">en</s:param>
! M* l0 W6 ]& [! n366.</s:url><s:a href="%{url}">English</s:a> ) K6 w/ |! `) N) C! \0 Y
367.如果href="#myurl" 他会把他当做字符处理 要这样:
8 S b0 f$ H* @, u368.<s:a href="%{#myurl}"/> ' n7 z1 d- g! [3 ^: g" X" y* v
369. * r. k; k! F! D8 c
370.*复选框 集合list和集合map
) G4 \1 j X- k' F371.集合list , s' ?; I# P+ p2 |8 K
372.<s:checkboxlist name="list" list="{'java','c#','c++'}" value="{'java','c#'}"/> / Y! b* M, K2 R5 m$ U5 I
373.value属性用于指定被选择的复选框
% V% b4 d" t# A/ H4 t5 y! F374. ) C* ^9 z' f& M# z: u1 R
375.集合map $ z1 @( D/ q0 B0 L5 Q4 H
376.<s:checkboxlist name="map" list="#{1:'java',2:'c#'}" listKey="key"
$ i; h' L7 M" s) E, R+ u- @3 s377.
R. U) a6 O5 O3 Y. w* {) }' _378.listValue="value" value="{1,2,3}"/> ( v: `. ~3 S2 T8 J4 M+ p
379.
3 o' p5 _( F4 C380.*单选框 }: Y# H: d4 ~! f: t, V
381.集合JavaBean 6 y. E5 A9 k: u/ @
382.<s:radio name="beans" list="#request.persons" listKey="personid" ' w& W) J! I+ r6 n& [9 Y
383.
2 }3 g+ E; D u! ?: V# j$ ~384.listValue="name"/> 6 g6 j6 `" b$ I- u. f
385.集合list 0 Q E* u3 A3 b+ B- ^- |! o0 e) _
386.<s:radio name="list" list="{'java','c#'}" value="java"/> , ^5 d V$ g7 y1 s
387.集合map
" J" ^8 C' I3 B' i8 {8 |# x388.<s:radio name="map" list="#{1:'java',2:'c#'}" listKey="key" listValue="value" ) Q# K" [) o! g/ M8 I- {
389.
( D$ F7 L. X7 {$ H. b390.value="1"/> - T7 } ?5 v- H; |
391. & E/ ~1 I' V/ m* z; A( T* d
392.*下拉列表框
6 ^2 R( S+ m3 I/ _8 m5 L393.<s:select name="list" list="{'java','c#'}" value="java"/>
% \* k' D& g7 F$ c+ d394.<s:select name="beans" list="#request.persons" listKey="personid" 3 n6 m) I5 _6 h9 ^% k3 k: q6 A
395.
5 Q; x W- Z& r( ^/ A# j+ t396.listValue="name"/>
) [3 J/ Y0 l6 Z5 o397.<s:select name="map" list="#{1:'java',2:'c#'}" listKey="key" listValue="value"
3 Y9 I# [* A6 B398. , M N: @ n" s! v& w+ h
399.value="1"/>
1 h* ~) R. Z* z. ^. B" T400.
6 Z# v* r3 U3 m401.18:防止表单重复提交 , @0 T( k# n' t' z
402.<s:form actio="" namespace="" method="post"? h0 C! D7 y9 b; u9 T
403. <s:textfield name="name"/> & Q, F. @6 \8 z' v
404. <s:soken/> 5 v' D: E7 \: T1 E1 m! c; m
405. <input type="submit" value="提交"/> 1 T6 W8 ~! s9 c
406.</s:form> 6 W! W$ \' U2 @) o7 o0 c2 ?$ V
407.引入拦截器
- N5 q3 U# m6 @3 T408.<interceptor-ref name="defaultStack"/> : h: n' v7 l8 U3 X3 O3 c
409.<interceptor-ref name="token"/>
6 X3 z9 r: E& U. ~3 U8 ]410.<result name="invalid.token">index.jsp</result>///发现表单重估提 |
|