锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产成人久久一区WWW,亚洲av无码片vr一区二区三区,亚洲国产AV无码专区亚洲AV http://m.tkk7.com/lijiajia418/Vicent's blogzh-cnSun, 11 May 2025 23:11:57 GMTSun, 11 May 2025 23:11:57 GMT60涓銆?妗ユ錛圔ridge錛夋ā寮?/title><link>http://m.tkk7.com/lijiajia418/archive/2006/09/18/70268.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Mon, 18 Sep 2006 05:38:00 GMT</pubDate><guid>http://m.tkk7.com/lijiajia418/archive/2006/09/18/70268.html</guid><wfw:comment>http://m.tkk7.com/lijiajia418/comments/70268.html</wfw:comment><comments>http://m.tkk7.com/lijiajia418/archive/2006/09/18/70268.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/lijiajia418/comments/commentRss/70268.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/lijiajia418/services/trackbacks/70268.html</trackback:ping><description><![CDATA[     鎽樿: 涓銆伮犳ˉ姊侊紙Bridge錛夋ā寮? 妗ユ妯″紡鏄竴涓潪甯告湁鐢ㄧ殑妯″紡錛屼篃鏄瘮杈冨鏉傜殑涓涓ā寮忋傜啛鎮夎繖涓ā寮忓浜庣悊瑙i潰鍚戝璞$殑璁捐鍘熷垯錛屽寘鎷?寮錛嶉棴"鍘熷垯(OCP)浠ュ強緇勫悎/鑱氬悎澶嶇敤鍘熷垯(CARP)閮藉緢鏈夊府鍔┿傜悊瑙eソ榪欎袱涓師鍒欙紝鏈夊姪浜庡艦鎴愭紜殑璁捐鎬濇兂鍜屽煿鍏昏壇濂界殑璁捐椋庢牸銆? 娉細銆奐ava涓庢ā寮忋嬩竴涔﹁涓築ridge妯″紡涓嶆槸涓涓嬌鐢ㄩ鐜囧緢楂樼殑妯″紡錛屾垜涓嶅お璧炲悓錛屾垜璁や負Bridge妯″紡涓?..  <a href='http://m.tkk7.com/lijiajia418/archive/2006/09/18/70268.html'>闃呰鍏ㄦ枃</a><img src ="http://m.tkk7.com/lijiajia418/aggbug/70268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/lijiajia418/" target="_blank">Binary</a> 2006-09-18 13:38 <a href="http://m.tkk7.com/lijiajia418/archive/2006/09/18/70268.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Hibernate Validator 綆浠?/title><link>http://m.tkk7.com/lijiajia418/archive/2006/09/01/67094.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Fri, 01 Sep 2006 06:05:00 GMT</pubDate><guid>http://m.tkk7.com/lijiajia418/archive/2006/09/01/67094.html</guid><wfw:comment>http://m.tkk7.com/lijiajia418/comments/67094.html</wfw:comment><comments>http://m.tkk7.com/lijiajia418/archive/2006/09/01/67094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/lijiajia418/comments/commentRss/67094.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/lijiajia418/services/trackbacks/67094.html</trackback:ping><description><![CDATA[ <p> <font color="#008000">鍦ㄩ」鐩殑涓氬姟灞炴т腑,浣犳槸涓嶆槸瑕佺粡甯擱獙璇佸睘鎬х殑鍙栧艱寖鍥村憿. 鎯寵浜嗚В姣旇緝浼樼編鐨勮В鍐蟲柟妗堝悧?聽聽聽聽聽聽聽聽聽聽 </font> </p> <p align="left"> <font color="#008000">鐪嬬湅Hibernate Validator 鏄庝箞鍋氱殑鍚?涓瑙佸埌濂?鐩鎬俊浣犲氨浼氳: Oh God, 榪欏氨鏄垜闇瑕佺殑.</font> </p> <p align="left"> <span style="COLOR: red">浠諱綍鑾峰緱Matrix鎺堟潈鐨勭綉绔欙紝杞澆璇蜂繚鐣欎互涓嬩綔鑰呬俊鎭拰閾炬帴錛?/span> <br />浣滆咃細icess(浣滆呯殑blog:<a target="_new">http://blog.matrix.org.cn/page/icess</a>)<br />鍏抽敭瀛楋細Hibernate Validator</p> <p>鐢ˋnnotations 緇欑被鎴栬呯被鐨勫睘鎬у姞涓婄害鏉?constraint),鍦ㄨ繍琛屾湡媯鏌ュ睘鎬у兼槸寰堜紭闆呯殑.Hibernate Validator灝辨槸榪欐牱鐨勪竴涓鏋?璇ユ鏋舵槸鍗佸垎瀹規槗鐨?灝卞儚鍙傝冩枃妗d腑瀹gО鐨勯偅鏍?,鍑犱箮娌℃湁浠涔堝涔犳洸綰?Validator 鏄竴涓獙璇佹鏋?涓嶉渶瑕佸拰Hibernate鐨勫叾浠栭儴鍒嗙粦瀹氬氨鍙互浣跨敤,鍙鍦ㄤ綘鐨勯」鐩腑娣誨姞Hibernate-annotations.jar搴撳氨鍙互浜?閭d箞涓嬮潰灝辮鎴戜滑鐪嬬湅鎬庝箞浣跨敤鍚?</p> <p align="left"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#3f7f5f">Person.java 綾?/font> </code> </p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#3f7f5f">/*</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*聽Created聽on聽2006-1-12 Person.java</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*聽@author聽</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package聽</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Length;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Min;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Valid;</font> <br />銆</code> </p> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">/<font color="#808000">/@Serializability聽 //嫻嬭瘯鑷畾涔夌害鏉?/font></span> </font> </code> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <br /> <font color="#7f0055"> <b>public聽class聽</b> </font> <font color="#000000">Person聽{</font> <br /> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>private聽</b> </font> <font color="#000000">String聽name;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>private聽int聽</b> </font> <font color="#000000">age;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>private聽</b> </font> <font color="#000000">Address聽address;</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">Person()聽{}</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#ff0000">@Valid //娉ㄦ剰姝ゅ</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">Address聽getAddress()聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>return聽</b> </font> <font color="#000000">address;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽void聽</b> </font> <font color="#000000">setAddress(Address聽address)聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.address聽=聽address;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">@Min(value聽=聽</font> <font color="#990000">1</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽int聽</b> </font> <font color="#000000">getAge()聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>return聽</b> </font> <font color="#000000">age;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽void聽</b> </font> <font color="#000000">setAge(</font> <font color="#7f0055"> <b>int聽</b> </font> <font color="#000000">age)聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.age聽=聽age;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">@Length(min聽=聽</font> <font color="#990000">4</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">String聽getName()聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>return聽</b> </font> <font color="#000000">name;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽void聽</b> </font> <font color="#000000">setName(String聽name)聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.name聽=聽name;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <p align="left">銆</p> <p align="left"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#3f7f5f">Address.java 綾?/font> </code> </p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#3f7f5f">/*</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*聽Created聽on聽2006-1-12 Address.java</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*聽@author聽</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package聽</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Length;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Max;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Min;</font> <br /> <br /> <font color="#7f0055"> <b>public聽class聽</b> </font> <font color="#000000">Address聽{</font> <br /> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>private聽</b> </font> <font color="#000000">String聽street;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>private聽int聽</b> </font> <font color="#000000">num;</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">Address()聽{}</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">@Min(value聽=聽</font> <font color="#990000">1</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">@Max(value聽=聽</font> <font color="#990000">100</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽int聽</b> </font> <font color="#000000">getNum()聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>return聽</b> </font> <font color="#000000">num;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽void聽</b> </font> <font color="#000000">setNum(</font> <font color="#7f0055"> <b>int聽</b> </font> <font color="#000000">num)聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.num聽=聽num;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">@Length(min聽=聽</font> <font color="#990000">3</font> <font color="#000000">,max聽=聽</font> <font color="#990000">8</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">String聽getStreet()聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>return聽</b> </font> <font color="#000000">street;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽void聽</b> </font> <font color="#000000">setStreet(String聽street)聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.street聽=聽street;</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <div id="dxbbhtt" class="java" align="left"> <p>涓婇潰鏄袱涓敤 Validator Annotations 娉ㄩ噴鐨?綾? 姣忎釜灞炴ч兘鐢?綰︽潫闄愬埗浜?聽 涓嬮潰鐪嬬湅嫻嬭瘯鐨勭被鍚?</p> </div> <p align="left"> <!-- ======================================================== --> <!-- = Java Sourcecode to HTML automatically converted code = --> <!-- = Java2Html Converter V4.1 2004 by Markus Gebhard markus@jave.de = --> <!-- = Further information: http://www.java2html.de = --> <font color="#000000"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier">TestValidator.java 綾?/code> </font> </p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#3f7f5f">/*</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*聽Created聽on聽2006-1-12</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*聽@author聽icerain</font> <br /> <font color="#ffffff">聽</font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package聽</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.ClassValidator;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.InvalidValue;</font> <br /> <br /> <br /> <font color="#7f0055"> <b>public聽class聽</b> </font> <font color="#000000">TestValidator聽{</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽void聽</b> </font> <font color="#000000">test()聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">Address聽add聽=聽</font> <font color="#7f0055"> <b>new聽</b> </font> <font color="#000000">Address();</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">add.setNum(</font> <font color="#990000">0</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">add.setStreet(</font> <font color="#2a00ff">"1"</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">Person聽p聽=聽</font> <font color="#7f0055"> <b>new聽</b> </font> <font color="#000000">Person();</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">p.setAddress(add);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">p.setAge(</font> <font color="#990000">0</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">p.setName(</font> <font color="#2a00ff">"ice"</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#3f5fbf">/******************Test聽validator聽********/</font> </code> </p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">聽聽聽 </font> <font color="#ff0000">// 娉ㄦ剰璇ュ鍙獙璇佷簡Person 涓轟簡璇存槑 @Valid 娉ㄩ噴鐨勪嬌鐢?/font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">ClassValidator<Person>聽classValidator聽=聽</font> <font color="#7f0055"> <b>new聽</b> </font> <font color="#000000">ClassValidator<Person>聽(Person.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">InvalidValue[]聽validMessages聽=聽classValidator.getInvalidValues(p);</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>for聽</b> </font> <font color="#000000">(InvalidValue聽value聽:聽validMessages)聽{</font> <br /> <font color="#ffffff">聽聽聽聽聽聽</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"InvalidValue聽鐨勯暱搴︽槸:"聽</font> <font color="#000000">+聽validMessages.length</font> <br /> <font color="#ffffff">聽聽聽聽聽聽聽聽</font> <font color="#000000">+</font> <font color="#2a00ff">"聽.聽楠岃瘉娑堟伅鏄?聽"聽</font> <font color="#000000">+聽value.getMessage()聽</font> <br /> <font color="#ffffff">聽聽聽聽聽聽聽聽</font> <font color="#000000">+聽</font> <font color="#2a00ff">"聽.聽PropertyPath聽鏄?"聽</font> <font color="#000000">+聽value.getPropertyPath()</font> <br /> <font color="#ffffff">聽聽聽聽聽聽聽聽</font> <font color="#000000">+</font> <font color="#2a00ff">"聽.\n\t聽PropertyName聽鏄?聽"聽</font> <font color="#000000">+value.getPropertyName()</font> <br /> <font color="#ffffff">聽聽聽聽聽聽聽聽</font> <font color="#000000">+聽</font> <font color="#2a00ff">"Value聽鏄?聽"聽</font> <font color="#000000">+聽value.getValue()</font> <br /> <font color="#ffffff">聽聽聽聽聽聽聽聽</font> <font color="#000000">+</font> <font color="#2a00ff">"聽Bean聽鏄?聽"</font> <font color="#000000">+聽value.getBean()</font> <br /> <font color="#ffffff">聽聽聽聽聽聽聽聽</font> <font color="#000000">+</font> <font color="#2a00ff">"\n\t聽BeanClass聽鏄?"聽</font> <font color="#000000">+聽value.getBeanClass());</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽聽</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽static聽void聽</b> </font> <font color="#000000">main(String[]聽args)聽{</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>new聽</b> </font> <font color="#000000">TestValidator().test();</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <p align="left">銆</p> <p align="left">紼嬪簭鐨勮緭鍑哄涓?<font size="2"><p align="left"><font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:4 . 楠岃瘉娑堟伅鏄? 蹇呴』澶т簬絳変簬 1 . PropertyPath 鏄?age .</font></p><p align="left"><font color="#ff00ff">PropertyName 鏄? age. Value 鏄? 0 Bean 鏄? test.annotation.validator.Person@dd87b2</font></p><p align="left"><font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Person</font></p><p align="left"><font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:4 . 楠岃瘉娑堟伅鏄? 闀垮害蹇呴』浠嬩簬 4 涓?2147483647 涔嬮棿 . PropertyPath 鏄?name .</font></p><p align="left"><font color="#ff00ff">PropertyName 鏄? name. Value 鏄? ice Bean 鏄? test.annotation.validator.Person@dd87b2</font></p><p align="left"><font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Person</font></p><p align="left"><font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:4 . 楠岃瘉娑堟伅鏄? 蹇呴』澶т簬絳変簬 1 . PropertyPath 鏄?address.num .</font></p><p align="left"><font color="#ff00ff">PropertyName 鏄? num. Value 鏄? 0 Bean 鏄? test.annotation.validator.Address@197d257</font></p><p align="left"><font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Address</font></p><p align="left"><font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:4 . 楠岃瘉娑堟伅鏄? 闀垮害蹇呴』浠嬩簬 3 涓?8 涔嬮棿 . PropertyPath 鏄?address.street .</font></p><p align="left"><font color="#ff00ff">PropertyName 鏄? street. Value 鏄? 1 Bean 鏄? test.annotation.validator.Address@197d257</font></p><p align="left"><font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Address</font></p><p align="left">鍙互鐪嬪嚭涓嶆弧瓚崇害鏉熺殑鍊奸兘琚寚鍑轟簡.</p><p align="left">鍚屾椂璇ュ彞: <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#000000">ClassValidator<Person>聽classValidator聽=聽</font><font color="#7f0055"><b>new聽</b></font><font color="#000000">ClassValidator<Person>聽(Person.</font><font color="#7f0055"><b>class</b></font><font color="#000000">);</font></code></p><p align="left">鎴戜滑鍙獙璇佷簡 Person. 鍦≒erson閲岄潰鐨凙ddress鐨勫睘鎬?鐢變簬鏈?code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#ff0000">@Valid Annotations </font>鎵浠?Address鐨勭浉鍏沖睘鎬т篃琚満鑱旈獙璇佷簡 .</code></p><p align="left"><code><span style="FONT-FAMILY: 'Courier New',Courier">濡傛灉 鎶?/span></code><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#ff0000">@Valid Annotations </font>鍘繪帀,緇撴灉濡備笅:</code></p><p align="left"><font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:2 . 楠岃瘉娑堟伅鏄? 蹇呴』澶т簬絳変簬 1 . PropertyPath 鏄?age .</font></p><p align="left"><font color="#ff00ff">PropertyName 鏄? age. Value 鏄? 0 Bean 鏄? test.annotation.validator.Person@18fef3d</font></p><p align="left"><font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Person</font></p><p align="left"><font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:2 . 楠岃瘉娑堟伅鏄? 闀垮害蹇呴』浠嬩簬 4 涓?2147483647 涔嬮棿 . PropertyPath 鏄?name .</font></p><p align="left"><font color="#ff00ff">PropertyName 鏄? name. Value 鏄? ice Bean 鏄? test.annotation.validator.Person@18fef3d</font></p><p align="left"><font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Person</font></p></font></p> <p> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">鍙互鐪嬪嚭 娌℃湁楠岃瘉 Address.</span> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">褰撶劧浜?,浣犺繕鍙互鍙獙璇佷竴涓睘鎬?, 娌℃湁蹇呰楠岃瘉鏁翠釜綾?鍙渶瑕佸湪璋冪敤</span> <font face="Courier New, Courier">classValidator.getInvalidValues(p,"age")鏂規硶鏃?鍔犱笂浣犺楠岃瘉鐨勫睘鎬у氨鍙互浜?濡傛垜浠彧鎯抽獙璇乤ge 灞炴?鎶婁唬鐮佹敼涓哄涓嬫墍紺?</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" color="#ff0000">InvalidValue[] validMessages = classValidator.getInvalidValues(p,"age"); /</font> <font face="Courier New, Courier" color="#0000ff">/鍙獙璇乤ge 灞炴?/font> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">榪愯緇撴灉濡備笅:</span> </code> </p> <p align="left"> <font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:1 . 楠岃瘉娑堟伅鏄? 蹇呴』澶т簬絳変簬 1 . PropertyPath 鏄?age .</font> </p> <p align="left"> <font color="#ff00ff">PropertyName 鏄? age. Value 鏄? 0 Bean 鏄? test.annotation.validator.Person@1457cb</font> </p> <p align="left"> <font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Person</font> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">鍙槸楠岃瘉浜?age 灞炴?</span> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">鎬庝箞鏍?,寰堢畝鍗曞惂. 鍏充簬 Hibernate Validator 鍐呭緩鐨勯獙璇丄nnotations 澶у鍙互鐪嬬湅 API 鎴栬?鍙傝冩枃妗?涓枃鐗堟垜姝e湪緲昏瘧涓?璇瘋闂垜鐨?<a >Blog </a>鑾峰緱鏈鏂頒俊鎭?.</span> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">濡傛灉浣犺鍐欒嚜宸辯殑綰︽潫鍛?, 浣犱笉鐢ㄦ媴蹇?,榪欎篃鏄緢瀹規槗鐨? </span> </code>浠諱綍綰︽潫鏈変袱閮ㄥ垎緇勬垚: [綰︽潫鎻忚堪絎?鍗蟲敞閲奭the constraint <span id="3ndhtv3" class="emphasis"><em>descriptor</em></span> (the annotation) 鍜孾綰︽潫validator 鍗?瀹炵幇綾籡 the constraint <span id="fxtp3pr" class="emphasis"><em>validator</em></span> (the implementation class).<code><span style="FONT-FAMILY: 'Courier New',Courier">涓嬮潰鎴戜滑鎵╁睍Hibernate Test suit 涓殑涓涓猅est 鏉ヨ瑙d竴涓?</span></code></p> <font size="2"> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">棣栧厛: 瑕佸0鏄庝竴涓?/span> </code>constraint <span id="tjdjltj" class="emphasis"><em>descriptor .濡備笅:</em></span></p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#7f0055"> <b>package聽</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">java.lang.annotation.Documented;</font> <br /> <font color="#7f0055"> <b>import聽static聽</b> </font> <font color="#000000">java.lang.annotation.ElementType.TYPE;</font> <br /> <font color="#7f0055"> <b>import聽static聽</b> </font> <font color="#000000">java.lang.annotation.ElementType.FIELD;</font> <br /> <font color="#7f0055"> <b>import聽static聽</b> </font> <font color="#000000">java.lang.annotation.ElementType.METHOD;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">java.lang.annotation.Retention;</font> <br /> <font color="#7f0055"> <b>import聽static聽</b> </font> <font color="#000000">java.lang.annotation.RetentionPolicy.RUNTIME;</font> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">java.lang.annotation.Target;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.ValidatorClass;</font> <br /> <br /> <font color="#3f5fbf">/**</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*聽Dummy聽sample聽of聽a聽bean-level聽validation聽annotation</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*聽</font> <font color="#7f9fbf">@author聽</font> <font color="#3f5fbf">Emmanuel聽Bernard</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*/</font> <br /> <font color="#000000">@ValidatorClass(SerializabilityValidator.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">)</font> <br /> <font color="#000000">@Target({METHOD,FIELD,TYPE})</font> <br /> <font color="#000000">@Retention(RUNTIME)</font> <br /> <font color="#000000">@Documented</font> <br /> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">@interface聽Serializability聽{</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>int聽</b> </font> <font color="#000000">num()聽</font> <font color="#7f0055"> <b>default聽</b> </font> <font color="#990000">11</font> <font color="#000000">; </font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">String聽message()聽</font> <font color="#7f0055"> <b>default聽</b> </font> <font color="#2a00ff">"bean聽must聽be聽serialiable"</font> <font color="#000000">;</font> <br /> <font color="#000000">}</font> </code> </p> </font> <p align="left"> <font size="2"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">@ValidatorClass(SerializabilityValidator.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">) 鎸囧嚭浜?</font> </code>constraint <span id="n35hlbz" class="emphasis"><em>validator 綾?</em></span></font> </p> <p align="left"> <font size="2"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">@Target({METHOD,FIELD,TYPE})</font> <br /> <font color="#000000">@Retention(RUNTIME)</font> <br /> <font color="#000000">@Documented聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </font> </code> </font> </p> <p align="left"> <code style="FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">榪欏嚑涓垜灝變笉鐢ㄨВ閲婁簡鍚?</font> </code> </p> <p align="left"> <code style="FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">Serializability聽閲岄潰澹版槑浜嗕竴涓?message 鏄劇ず綰︽潫鐨勬彁紺轟俊鎭? num 鍙槸涓轟簡璇存槑涓涓柟闈?鍦ㄨ繖閲岄潰娌℃湁瀹為檯鐢ㄩ旂敤 .</font> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">鐒跺悗灝辨槸 瀹炵幇涓涓?/span> </code>constraint <em><span id="ndxpnx5" class="emphasis">validator 綾?璇ョ被瑕佸疄鐜?/span></em><tt class="literal">Validator<ConstraintAnnotation></tt><em><span id="35l5fxp" class="emphasis">.榪欓噷鏄?/span></em><font size="2"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#000000">SerializabilityValidator.java 濡備笅:</font></code></font></p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#3f7f5f">//$Id:聽SerializabilityValidator.java,v聽1.3聽2005/11/17聽18:12:11聽epbernard聽Exp聽$</font> <br /> <font color="#7f0055"> <b>package聽</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">java.io.Serializable;</font> <br /> <br /> <font color="#7f0055"> <b>import聽</b> </font> <font color="#000000">org.hibernate.validator.Validator;</font> <br /> <br /> <font color="#3f5fbf">/**</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*聽Sample聽of聽a聽bean-level聽validator</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*聽</font> <font color="#7f9fbf">@author聽</font> <font color="#3f5fbf">Emmanuel聽Bernard</font> <br /> <font color="#ffffff">聽</font> <font color="#3f5fbf">*/</font> <br /> <font color="#7f0055"> <b>public聽class聽</b> </font> <font color="#000000">SerializabilityValidator聽</font> <font color="#7f0055"> <b>implements聽</b> </font> <font color="#000000">Validator<Serializability>,聽Serializable聽{</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>public聽boolean聽</b> </font> <font color="#000000">isValid(Object聽value)聽{</font> <br /> <font color="#ffffff">聽聽聽</font> <font color="#00ff00">//榪欓噷鍙槸Validator 閲岄潰鐨?瀹炵幇楠岃瘉瑙勫垯鐨?鏂規硶. value 鏄楠岃瘉鐨勫?</font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"IN聽SerializabilityValidator聽isValid:"</font> <font color="#000000">+value.getClass()+</font> <font color="#2a00ff">":聽"聽</font> <font color="#000000">+value.toString()); </font> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#7f0055"> <b>return聽</b> </font>value<font color="#3f7f5f">聽</font><font color="#800080">instanceof</font><font color="#3f7f5f">聽</font>Serializable<font color="#3f7f5f">;</font><br /><font color="#ffffff">聽聽</font><font color="#000000">}</font><br /><br /><font color="#ffffff">聽聽</font><font color="#7f0055"><b>public聽void聽</b></font><font color="#000000">initialize(Serializability聽parameters)聽{</font><br /><font color="#ffffff">聽聽聽聽</font><font color="#3f7f5f">//聽鍦ㄨ繖閲屽彲浠?鍙栧緱 </font></code> <font size="2">constraint <em><span id="h3th5rh" class="emphasis">descriptor 閲岄潰鐨勫睘鎬?濡備笂闈㈡垜浠0鏄庣殑 num </span></em></font> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <br /> <font color="#ffffff">聽聽聽聽</font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"IN聽SerializabilityValidator:聽parameters:"</font> <font color="#000000">+聽parameters.num()聽);</font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <p align="left">鐒跺悗鍦ㄤ綘鐨勭被涓簲鐢ˊ<font size="2"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#000000">Serializability聽 灝卞彲浠ョ害鏉熶竴涓被瀹炵幇</font></code></font><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier">Serializable 鎺ュ彛浜? 濡備笅:</code></p> <p align="left">鍦ㄦ垜浠殑Person.java綾?娣誨姞@<font size="2"><code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#000000">Serializability聽 Annotations ,鎶奝erson.java 涓殑 </font></code></font><code><font size="2"><span style="FONT-FAMILY: 'Courier New',Courier">/<font color="#808000">/@Serializability //嫻嬭瘯鑷畾涔夌害鏉?</font>娉ㄩ噴鍘繪帀灝眔k浜?</span></font></code></p> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">榪愯緇撴灉濡備笅:</span> </font> </code> <font size="2"> <p align="left"> <font color="#ff00ff">InvalidValue 鐨勯暱搴︽槸:3 . 楠岃瘉娑堟伅鏄? </font> <font color="#008000">bean must be serialiable</font> <font color="#ff00ff"> . PropertyPath 鏄?null .</font> </p> <p align="left"> <font color="#ff00ff">PropertyName 鏄? null. Value 鏄? test.annotation.validator.Person@1a73d3c Bean 鏄? test.annotation.validator.Person@1a73d3c</font> </p> <p align="left"> <font color="#ff00ff">BeanClass 鏄?class test.annotation.validator.Person</font> </p> </font> </p> <p> </p> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">鐜板湪鎶奝erson綾誨疄鐜?java.io.Serializable 鎺ュ彛 鍒欐病鏈夊嚭鐜?楠岃瘉閿欒娑堟伅.</span> </font> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">娑堟伅鐨勫浗闄呭寲涔熸槸寰堢畝鍗曠殑,鎶?/span> </code> <font size="2"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">Serializability聽 涓殑message 鏀逛負浠}鎵╀綇鐨?灞炴ф枃浠剁殑Key灝卞彲浠ヤ簡 </font> </code> </font> </p> <p align="left"> <font size="2"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#7f0055"> <b>public聽</b> </font> <font color="#000000">@interface聽Serializability聽{</font> <br /> <font color="#ffffff">聽聽</font> <font color="#7f0055"> <b>int聽</b> </font> <font color="#000000">num()聽</font> <font color="#7f0055"> <b>default聽</b> </font> <font color="#990000">11</font> <font color="#000000">; </font> <br /> <font color="#ffffff">聽聽</font> <font color="#000000">String聽message()聽</font> <font color="#7f0055"> <b>default聽</b> </font> <font color="#2a00ff">"{Serializable}"; </font> <font color="#008000">//"bean聽must聽be聽serialiable"; </font> <font color="#ff0000">//娑堟伅鐨勫浗闄呭寲</font> <br /> <font color="#000000">}</font> </code> </font> </p> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">鐒跺悗緙栬緫璧勬枡鏂囦歡. 娉ㄦ剰 璇ヨ祫婧愭枃浠朵腑瑕佸寘鎷?Hibernate Validator 鍐呭緩鐨勮祫婧? 鍙互鍦ㄨorg\hibernate\validator\resources 鍖呴噷闈㈢殑璧勬簮鏂囦歡鍩虹涓婁慨鏀?,鍦ㄦ墦鍖呴噷闈?榪欐牱灝卞彲浠ヤ簡. 鑷繁鎵撳寘鍙兘涓嶅お鏂逛究.浣犲彲浠ユ妸璇ュ寘閲岄潰鐨勬枃浠跺鍒跺嚭鏉?鐒跺悗鏀懼埌浣犺嚜宸辯殑欏圭洰鍖呬笅鍦ㄨ嚜宸辯紪杈? 璇ユ祴璇曚腑 鎴戞槸鏀懼湪 test\resources 鍖呬笅鐨?</span> </font> </code> </p> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">鐒跺悗鍦?璧勬簮鏂囦歡涓坊鍔?</span> </font> </code> <font size="2"> <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"> <font color="#2a00ff">Serializable = '''''' </font>榪欎箞涓琛? 鏍蜂緥濡備笅:</code> </font> </p> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">#<font color="#ff0000">DefaultValidatorMessages.properties (DefaultValidatorMessages_zh.properties 涓嶅啀鍒楀嚭^_^)</font></span> </font> </code> </p> <p align="left">銆</p> <p align="left"> <code> <font face="Courier New, Courier" color="#ff0000" size="2">#涓嬮潰鏄?Hibernate Validator 鍐呭緩鐨勫浗闄呭寲娑堟伅 </font> </code> <font size="2"> </font> </p> <p align="left"> <font size="2">validator.assertFalse=</font> <font color="#2a00ff" size="2">assertion</font> <font size="2"> </font> <font color="#2a00ff" size="2">failed</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.assertTrue=</font> <font color="#2a00ff" size="2">assertion</font> <font size="2"> </font> <font color="#2a00ff" size="2">failed</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.future=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">a</font> <font size="2"> </font> <font color="#2a00ff" size="2">future</font> <font size="2"> </font> <font color="#2a00ff" size="2">date</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.length=</font> <font color="#2a00ff" size="2">length</font> <font size="2"> </font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">between</font> <font size="2"> </font> <font color="#2a00ff" size="2">{min}</font> <font size="2"> </font> <font color="#2a00ff" size="2">and</font> <font size="2"> </font> <font color="#2a00ff" size="2">{max}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.max=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">less</font> <font size="2"> </font> <font color="#2a00ff" size="2">than</font> <font size="2"> </font> <font color="#2a00ff" size="2">or</font> <font size="2"> </font> <font color="#2a00ff" size="2">equal</font> <font size="2"> </font> <font color="#2a00ff" size="2">to</font> <font size="2"> </font> <font color="#2a00ff" size="2">{value}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.min=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">greater</font> <font size="2"> </font> <font color="#2a00ff" size="2">than</font> <font size="2"> </font> <font color="#2a00ff" size="2">or</font> <font size="2"> </font> <font color="#2a00ff" size="2">equal</font> <font size="2"> </font> <font color="#2a00ff" size="2">to</font> <font size="2"> </font> <font color="#2a00ff" size="2">{value}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.notNull=</font> <font color="#2a00ff" size="2">may</font> <font size="2"> </font> <font color="#2a00ff" size="2">not</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">null</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.past=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">a</font> <font size="2"> </font> <font color="#2a00ff" size="2">past</font> <font size="2"> </font> <font color="#2a00ff" size="2">date</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.pattern=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">match</font> <font size="2"> </font> <font color="#2a00ff" size="2">"{regex}"</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.range=</font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">between</font> <font size="2"> </font> <font color="#2a00ff" size="2">{min}</font> <font size="2"> </font> <font color="#2a00ff" size="2">and</font> <font size="2"> </font> <font color="#2a00ff" size="2">{max}</font> </p> <font color="#2a00ff" size="2"> </font> <font size="2"> </font> <p align="left"> <font size="2">validator.size=</font> <font color="#2a00ff" size="2">size</font> <font size="2"> </font> <font color="#2a00ff" size="2">must</font> <font size="2"> </font> <font color="#2a00ff" size="2">be</font> <font size="2"> </font> <font color="#2a00ff" size="2">between</font> <font size="2"> </font> <font color="#2a00ff" size="2">{min}</font> <font size="2"> </font> <font color="#2a00ff" size="2">and</font> <font size="2"> </font> <font color="#2a00ff" size="2">{max}</font> </p> <p align="left"> <font color="#2a00ff" size="2">#涓嬮潰鏄嚜瀹氫箟鐨勬秷鎭?/font> </p> <font size="2"> </font> <p align="left"> <font size="2">Serializable=</font> <font color="#2a00ff" size="2">Bean</font> <font size="2"> </font> <font color="#2a00ff" size="2">not</font> <font size="2"> </font> <font color="#2a00ff" size="2">Serializable聽 //鍔犱笂鑷繁瀹氫箟鐨勫浗闄呭寲娑堟伅. </font> </p> <font color="#2a00ff" size="2"> </font> <p align="left"> <code> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier">鍦ㄦ瀯閫?/span> </font> <font face="Courier New, Courier" size="2">ClassValidator</font> <font size="2"> <span style="FONT-FAMILY: 'Courier New',Courier"> 鏃惰娣諱笂 璧勬簮鏂囦歡 濡備笅:(鍦ㄦ祴璇曠被涓?</span> </font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">ClassValidator<Person> classValidator = new ClassValidator<Person> (Person.class,<font color="#ff0000">ResourceBundle.getBundle("</font><font color="#0000ff">test.resources.DefaultValidatorMessages</font><font color="#ff0000">"</font>));//鍔犺澆璧勬簮</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">榪欐牱灝卞彲浠ヤ簡 .聽 褰撶劧 浣犺繕鍙互 鏇存敼 Hibernate Validator 鐨勬秷鎭?涓嶆槸鍦ㄤ笂闈㈢殑璧勬簮鏂囦歡涓洿鎺ヤ慨鏀?/font> </code> <font size="2">validator.length = ... 絳夌瓑 </font> <code> <font face="Courier New, Courier" size="2">) , 榪樿寰?Validator 娉ㄩ噴涓湁涓?message 鍏冪礌鍚? 浣犱互鍓嶇敤鐨勯兘鏄粯璁ゅ?鐜板湪浣犲彲浠ヨ涓轟綘鑷繁瀹氫箟鐨勪簡.</font> </code> <font size="2">濡?validator.length 鎴戞妸浠栨敼涓?"<font color="#0000ff">璇ュ瓧絎︿覆鐨勯暱搴︿笉絎﹀悎瑙勫畾鑼冨洿鑼冨洿</font>". 鍦ㄨ祫婧愭枃浠朵腑娣誨姞涓琛岄敭鍊煎睘鎬у(key瀹氫箟涓?"<font color="#ff0000">myMsg</font>")濡備笅:</font> </p> <p align="left"> <font size="2">myMsg=<font color="#0000ff">璇ュ瓧絎︿覆鐨勯暱搴︿笉絎﹀悎瑙勫畾鑼冨洿鑼冨洿</font></font> </p> <p align="left"> <font size="2">騫朵笖榪樿鍦?/font> <font color="#0000ff" size="2">@Length </font> <font size="2">娉ㄩ噴涓彁渚沵essage鐨勫紩鐢ㄧ殑key 濡備笅</font> <font color="#0000ff" size="2">@Length(min = 4,message = "{</font> <font color="#ff0000" size="2">myMsg</font> <font color="#0000ff" size="2">}")</font> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">鍐嶄竴嬈¤繍琛屾祴璇?,鎴戜滑灝卞彲浠ョ湅鍒頒笂闈袱鏉¤嚜瀹氫箟緇戝畾鐨勬秷鎭簡 .濡備笅:</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">InvalidValue 鐨勯暱搴︽槸:3 . <font color="#008000">楠岃瘉娑堟伅鏄?/font>: <font color="#ff0000">Bean 涓嶆槸 鍙?Serializable</font> . PropertyPath 鏄?null .<br />PropertyName 鏄? null. Value 鏄? test.annotation.validator.Person@1bd4722 Bean 鏄? test.annotation.validator.Person@1bd4722<br />BeanClass 鏄?class test.annotation.validator.Person</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier"> <br />InvalidValue 鐨勯暱搴︽槸:3 . <font color="#008000">楠岃瘉娑堟伅鏄?/font>: <font color="#ff0000">璇ュ瓧絎︿覆鐨勯暱搴︿笉絎﹀悎瑙勫畾鑼冨洿鑼冨洿</font> . PropertyPath 鏄?name .<br />PropertyName 鏄? name. Value 鏄? ice Bean 鏄? test.annotation.validator.Person@1bd4722<br />BeanClass 鏄?class test.annotation.validator.Person</font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier">鎬庝箞鏍?姣斾綘鎯寵薄鐨勭畝鍗曞惂. </font> </code> </p> <p align="left"> <code> <font face="Courier New, Courier" size="2">OK 涓婇潰鎴戜滑璁ㄨ浜?</font> </code>Hibernate Validator 鐨勪富瑕佺敤娉? 浣嗘槸 璇ユ鏋舵湁浠涔堢敤鍛? ^_^</p> <p align="left">鐪嬪埌榪欓噷鍏跺疄涓嶇敤鎴戝湪澶氳浜?澶у閮界煡閬撴庝箞鐢?浠涔堟椂鍊欑敤. 浣滀負涓綃囦粙緇嶆ф枃绔犳垜榪樻槸鍦ㄦ緇欏嚭涓涓渶甯哥敤鐨勪緥瀛愬惂,鏇村ソ鐨勪嬌鐢ㄦ柟寮忓ぇ瀹舵參鎱㈡寲鎺樺惂.</p> <p align="left">姣斿 : 浣犵幇鍦ㄥ湪寮鍙戜竴涓漢鍔涜祫婧?HR)緋葷粺 (鍏跺疄鏄垜浠珽RP璇劇▼鐨勪竴涓綔涓?^_^), 閲岄潰瑕佸鐞嗗ぇ閲忕殑鏁版嵁,灝ゅ叾鏄湪杈撳叆鍚勭璧勬枡鏃?濡?鐧昏鍛樺伐淇℃伅. 濡傛灉浣犲叕鍙哥殑鍛樺伐鐨勫勾榫勮姹傛槸18 -- 60 閭d箞浣犳墍杈撳叆鐨勫勾榫勫氨涓嶈兘瓚呭嚭榪欎釜鑼冨洿. 浣犲彲鑳戒細璇磋繖寰堝鏄撳晩 , 涓嶇敤Validator灝卞彲浠ヨВ鍐沖晩.榪欎繚鎸佹暟鎹墠楠岃瘉灝卞彲浠ュ暒 濡俰f ( e.getAge() > 60 || e.getAge() < 18 ) ........ 緇欏嚭閿欒淇℃伅 鐒跺悗鎻愮ず閲嶆柊杈撳叆涓嶅氨OK鍟?鐢ㄥ緱鐫 鍏村笀鍔ㄤ紬鐨勬潵涓涓夋柟妗嗘灦鍚? </p> <p align="left">鏄晩 褰撳氨楠岃瘉榪欎竴涓睘鎬ф椂, 娌℃湁蹇呰鍟?! 浣嗘槸涓涓湡姝g殑HR 緋葷粺,浼氬彧鏈変竴涓睘鎬ц楠岃瘉鍚? 鎭愭曡鏈塏澶氬惂</p> <p align="left">浣犺鏄瘡涓涓兘閭f牱 鍐欎竴孌甸獙璇佷唬鐮?鏄笉鏄緢鐑﹀晩 ,鍐典笖涔熶笉鏂逛究浠g爜閲嶇敤. 鐜板湪鑰冭檻涓浜?Validator 鏄笉鏄洿楂樻晥鍟?鎷︽埅鍒?綰︽潫榪濅緥鐨?灞炴?灝卞彲浠ョ洿鎺ュ緱鍒?鍥介檯鍖栫殑娑堟伅 鍙互鎶婅娑堟伅鏄劇ず鍒頒竴涓脊鍑哄璇濇涓?鎻愮ず鏇存聽 !</p> <p align="left">Validator鐨勭敤澶勪笉鍙繖涓縐?,浣犲彲浠ユ兂鍒板浣曠敤鍛?! 嬈㈣繋鍙戣〃浣犵殑楂樿!!</p> <p align="left">OK 鍒版 鎴戜滑鐨?Hibernate Validator 涔嬫梾灝辮鍏堝憡涓孌佃惤浜?. 甯屾湜榪欐槸浠や綘蹇冩椃紲炴$殑涓嬈″瘨鍐箣鏃?</p> <p align="left">鎶婁綘瀛﹀埌鐨勫簲鐢ㄥ埌浣犵殑欏圭洰涓惂,涓瀹氫細鎻愰珮浣犵殑鐢熶駭鐜囩殑. 鐩鎬俊鎴?,娌¢敊鐨劼?^_^ !</p> <img src ="http://m.tkk7.com/lijiajia418/aggbug/67094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/lijiajia418/" target="_blank">Binary</a> 2006-09-01 14:05 <a href="http://m.tkk7.com/lijiajia418/archive/2006/09/01/67094.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Hibernate Annotations 瀹炴垬(浜?http://m.tkk7.com/lijiajia418/archive/2006/09/01/67093.htmlBinaryBinaryFri, 01 Sep 2006 06:04:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67093.htmlhttp://m.tkk7.com/lijiajia418/comments/67093.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67093.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67093.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67093.html-- hbm.xml 涓?Annotations 鎬ц兘姣旇緝

浠諱綍鑾峰緱Matrix鎺堟潈鐨勭綉绔欙紝杞澆璇蜂繚鐣欎互涓嬩綔鑰呬俊鎭拰閾炬帴錛?/span>
浣滆咃細icess(浣滆呯殑blog:http://blog.matrix.org.cn/page/icess)
鍏抽敭瀛楋細Hibernate Validator

鎴戝湪鍓嶉潰涓綃囨枃绔?lt;Hibernate Annotations 瀹炴垬-- 浠?hbm.xml 鍒?Annotations>:

涓?鏈夊緢澶氬紑鍙戣呭湪璋堣涓彁鍒?鏈夋病鏈夊繀瑕佷粠 hbm.xml 寰 Annotations 涓婅漿縐? 閭d箞鍦ㄨ繖綃囨枃绔犱腑鎴戜滑灝辨潵璁ㄨ涓涓?hbm.xml 涓?Annotations鐨勪紭緙虹偣,鐪嬬湅閭g鎯呭喌鏈閫傚悎浣?

棣栧厛,璁ㄨ涓涓?xml 閰嶇疆鏂囦歡鐨勪紭鐐? 涓漢璁や負涓昏浼樼偣灝辨槸褰撲綘鏀瑰彉搴曞眰閰嶇疆鏃?涓嶉渶瑕佹敼鍙樺拰閲嶆柊緙栬瘧浠g爜,鍙渶瑕佸湪xml 涓洿鏀瑰氨鍙互浜?渚嬪 Hibernate.cfg.xml 褰撲綘瑕佹洿鏀瑰簳灞傛暟鎹簱鏃? 鍙鏇存敼閰嶇疆鏂囦歡灝卞彲浠ヤ簡.Hibernate浼氫負浣犲仛濂藉埆鐨勪簨鎯?

閭d箞xml鐨勭己鐐瑰憿,涓漢璁や負鏈変互涓嬪嚑鐐?

  • 鎻忚堪絎﹀錛屼笉瀹規槗璁板繂,鎺屾彙 瑕佹繁鍏ヤ簡瑙h繕鏈夌湅DTD鏂囦歡

  • 鏃犳硶鍋氳嚜鍔ㄦ牎楠岋紝闇瑕佷漢宸ユ煡鎵?

  • 璇誨彇鍜岃В鏋恱ml閰嶇疆瑕佹秷鑰椾竴瀹氭椂闂達紝瀵艱嚧搴旂敤鍚姩鎱紝涓嶄究浜庢祴璇曞拰緇存姢

  • 褰撶郴緇熷緢澶ф椂錛屽ぇ閲忕殑xml鏂囦歡闅句互綆$悊

  • 榪愯涓繚瀛榵ml閰嶇疆闇瑕佹秷鑰楅澶栫殑鍐呭瓨

  • 鍦∣/R Mapping鐨勬椂鍊欓渶瑕佸湪java鏂囦歡鍜寈ml閰嶇疆鏂囦歡涔嬮棿浜ゆ浛錛屽澶т簡宸ヤ綔閲?

鍏朵腑絎竴 浜岀偣 鍊熷姪浜庡厛榪涚殑IDE 鍙兘涓嶆槸浠涔堥棶棰? 浣嗘槸瀵瑰垵瀛﹁呰繕鏄釜闂 ^_^.

涓嬮潰鎴戜滑鐪嬬湅 Annotations鐨?鐗規у惂! 鍙互瑙e喅xml閬囧埌鐨勯棶棰?鏈変互涓嬩紭鐐?/p>

  • 鎻忚堪絎﹀噺灝戙備互鍓嶅湪xml閰嶇疆涓線寰闇瑕佹弿榪癹ava灞炴х殑綾誨瀷錛屽叧緋葷瓑絳夈傝屽厓鏁版嵁鏈韓灝辨槸java璇█錛屼粠鑰岀渷鐣ヤ簡澶ч噺鐨勬弿榪扮

  • 緙栬瘧鏈熸牎楠屻傞敊璇殑鎵規敞鍦ㄧ紪璇戞湡闂村氨浼氭姤閿欍?

  • 鍏冩暟鎹壒娉ㄥ湪java浠g爜涓紝閬垮厤浜嗛澶栫殑鏂囦歡緇存姢宸ヤ綔

  • 鍏冩暟鎹緙栬瘧鎴恓ava bytecode錛屾秷鑰楃殑鍐呭瓨灝戯紝璇誨彇涔熷緢蹇紝鍒╀簬嫻嬭瘯鍜岀淮鎶?

鍏充簬 鏄犲皠鏂囦歡鏄嬌鐢?hbm.xml 鏂囦歡榪樻槸浣跨敤 Annotations 鎴戜滑鏉ョ湅鐪?鑰呯殑鎬ц兘鍚? 鍏堝0鏄庝竴涓?涓漢璁や負鏄犲皠鏂囦歡涓鏃﹂厤緗ソ灝變笉浼氬湪寰堝ぇ紼嬪害涓婃敼鍙樹簡.鎵浠ヤ嬌鐢▁ml鏂囦歡騫朵笉浼氬甫鏉ュ緢澶х殑濂藉.濡傛灉浣犺涓?鏄犲皠鏂囦歡鍦ㄤ綘鐨勯」鐩腑涔熺粡甯稿彉鍖?姣斿涓鍒桽tring鏁版嵁 ,浠婂ぉ浣犱嬌鐢?length="16" 鏄庡ぉ浣犺涓?璇ユ暟鎹殑闀垮害搴旇鏇撮暱鎵嶈兘婊¤凍涓氬姟闇姹?浜庢槸鏀逛負length="128" 絳夌瓑綾諱技鐨勯棶棰?. 濡傛灉浣犵粡甯告湁榪欐柟闈㈢殑鍙樺姩鐨勮瘽,涓嬮潰鐨勬瘮杈冧綘鍙互涓嶇敤鐪嬩簡 , 浣犲簲璇ヤ嬌鐢?xml鏂囦歡 鍥犱負Annotations 鏃犳硶寰堝ソ鐨勬弧瓚充綘鐨勮姹?

鐜板湪璁╂垜浠氨鏉ョ湅鐪?鑰呯殑鎬ц兘姣旇緝鍚?

(璇存槑: 榪欓噷鍙槸姣旇緝鏌ユ壘 鎻掑叆 鐨勬椂闂村揩鎱?娌℃湁姣旇緝闄よ繍琛屾椂闂翠互澶栫殑鍏朵粬鎬ц兘,濡?鍐呭瓨鍗犵敤閲?絳夌瓑)

鍏堟潵鐪嬬湅嫻嬭瘯紼嬪簭鍜岄厤緗?

棣栧厛鍦?Hibernate.cfg.xml 鏂囦歡涓幓鎺変簡

<property name="hibernate.hbm2ddl.auto">update</property>

榪欎竴琛? 鍥犱負鍦ㄥ墠闈㈢殑瀹為獙涓互鍙婂緩绔嬩簡鏁版嵁搴撹〃浜?涓嶅啀闇瑕佹洿鏂頒簡.濡傛灉浣犳槸絎竴嬈¤繍琛岃渚嬪瓙 榪樻槸瑕佽琛岀殑.

Test.java 濡備笅:

/*
*聽Created聽on聽2005
*聽@author聽
*/
package聽test.hibernate.annotation;

import聽org.hibernate.Session;
import聽org.hibernate.Transaction;

public聽class聽Test聽{
聽聽
聽聽public聽static聽void聽main(String聽[]聽args)聽{
聽聽聽聽long聽start聽=聽0;
聽聽聽聽long聽end聽=聽0;
聽聽聽聽start聽=聽System.currentTimeMillis();聽聽//紼嬪簭寮濮嬫椂闂?/font>
聽聽聽聽
聽聽聽聽Session聽s聽=聽HibernateUtil.currentSession();
聽聽聽聽long聽mid聽=聽聽System.currentTimeMillis();聽聽//鍒濆鍖栧畬姣曠殑鏃墮棿 (鍙兘姝ゆ椂騫舵病鏈夊垵濮嬪寲瀹屾瘯^_^)
聽聽聽聽
聽聽聽聽Transaction聽tx聽=聽s.beginTransaction();聽聽聽聽
聽聽聽聽/********************嫻嬭瘯璇誨彇鐨勪唬鐮?***********************/
聽聽聽聽Person聽p聽=聽null;
聽聽聽聽for(int聽i聽=聽1;聽i聽<=聽100;聽i聽++)聽{
聽聽聽聽p聽=聽(Person)聽s.get(Person.class,聽i);
聽聽聽聽System.out.println(p.getName());
聽聽聽聽}
聽聽聽聽System.out.println(p.getName());

聽聽聽 /********************嫻嬭瘯璇誨彇1嬈$殑浠g爜************************/
聽聽聽聽Person聽p聽=聽null;
聽聽聽聽p聽=聽(Person)聽s.get(Person.class,聽1);
聽聽聽聽System.out.println(p.getName());
聽聽聽聽/*********************嫻嬭瘯鎻掑叆鐨勪唬鐮?************************************/
聽聽聽聽/*
聽聽聽聽for聽(int聽i聽=聽0;聽i聽<聽100;聽i聽++)聽{
聽聽聽聽聽聽Person聽p聽=聽new聽Person();
聽聽聽聽聽聽p.setAge(i+1);
聽聽聽聽聽聽p.setName("icerain"+i);
聽聽聽聽聽聽p.setSex("male"+i);
聽聽聽聽聽聽s.save(p);
聽聽聽聽聽聽s.flush();
聽聽聽聽}
聽聽聽聽*/
聽聽聽聽tx.commit();
聽聽聽聽HibernateUtil.closeSession();
聽聽聽聽
聽聽聽聽end聽=聽System.currentTimeMillis();聽//嫻嬭瘯緇撴潫鏃墮棿
聽聽聽聽System.out.println("String[]聽-聽start聽time:聽"聽+聽start);
聽聽聽聽System.out.println("String[]聽-聽end聽time:聽"聽+聽end);
聽聽聽聽System.out.println("Init聽time聽:聽"聽+聽(mid-start)); // 鎵撳嵃鍒濆鍖栫敤鐨勬椂闂?/font>
聽聽聽聽System.out.println("Last聽time聽is聽:"聽+(end聽-聽mid)聽); //鎵撳嵃 鏁版嵁鎿嶄綔鐨勬椂闂?/font>
聽聽聽聽System.out.println("Total聽time聽:聽"聽+(end聽-聽start)); //鎵撳嵃鎬繪椂闂?br />聽聽}
}

Annotations 鍖呬腑鐨凱erson.java 濡備笅

package聽test.hibernate.annotation;

import聽java.util.LinkedList;
import聽java.util.List;

import聽javax.persistence.AccessType;
import聽javax.persistence.Basic;
import聽javax.persistence.Entity;
import聽javax.persistence.GeneratorType;
import聽javax.persistence.Id;
import聽javax.persistence.Table;
import聽javax.persistence.Transient;

/**
*聽Person聽generated聽by聽hbm2java
*/

@SuppressWarnings("serial")
@Entity(access聽=聽AccessType.PROPERTY)
@Table
public聽class聽Person聽implements聽java.io.Serializable聽{
聽聽private聽Integer聽id;
聽聽private聽String聽name;
聽聽private聽String聽sex;
聽聽private聽Integer聽age;
聽聽private聽List聽list聽=聽new聽LinkedList();

聽聽//聽Constructors
聽聽/**聽default聽constructor聽*/
聽聽public聽Person()聽{
聽聽}

聽聽/**聽constructor聽with聽id聽*/
聽聽public聽Person(Integer聽id)聽{
聽聽聽聽this.id聽=聽id;
聽聽}

聽聽//聽Property聽accessors
聽聽@Id(generate=GeneratorType.AUTO)
聽聽public聽Integer聽getId()聽{
聽聽聽聽return聽this.id;
聽聽}

聽聽public聽void聽setId(Integer聽id)聽{
聽聽聽聽this.id聽=聽id;
聽聽}

聽聽@Basic
聽聽public聽String聽getName()聽{
聽聽聽聽return聽this.name;
聽聽}

聽聽public聽void聽setName(String聽name)聽{
聽聽聽聽this.name聽=聽name;
聽聽}

聽聽@Basic
聽聽public聽String聽getSex()聽{
聽聽聽聽return聽this.sex;
聽聽}

聽聽public聽void聽setSex(String聽sex)聽{
聽聽聽聽this.sex聽=聽sex;
聽聽}

聽聽@Basic
聽聽public聽Integer聽getAge()聽{
聽聽聽聽return聽this.age;
聽聽}

聽聽public聽void聽setAge(Integer聽age)聽{
聽聽聽聽this.age聽=聽age;
聽聽}
聽聽@Transient
聽聽public聽List聽getList()聽{
聽聽聽聽return聽list;
聽聽}
聽聽public聽void聽setList(List聽list)聽{
聽聽聽聽this.list聽=聽list;
聽聽}

}

鍏朵粬鐨勪唬鐮佸嚑涔庢病鏈夋敼鍙?

涓嬮潰鐨勬瘡縐嶇被鍨嬬殑嫻嬭瘯閮芥祴璇曚簡3嬈′互涓? 鍙栦腑闂寸殑嫻嬭瘯鏃墮棿.

嫻嬭瘯鏈哄櫒閰嶇疆:

CPU:聽 AMD Athlon (xp) 2000+

鍐呭瓨: 784880KB

紜洏: 涓夋槦 SP0812N

璇誨彇涓嬈÷犅犵殑姣旇緝:(鍗曚綅: 姣)

浣跨敤Annotations 鐨勬祴璇曟暟鎹?/td>浣跨敤Xml鏂囦歡鐨勬祴璇曟暟鎹?/td>綆瑕佽鏄?/td>
Init time : 2444Init time : 2431嫻嬭瘯鍓嶆垜璁や負璇ラ」緇撴灉xml搴旇姣旇緝澶?瑕佽鍙栨槧灝勬枃浠跺晩,瀹為檯鎯呭喌涓嶆槸榪欐牱,涓嶇煡閬撲負浠涔?
Last time is :62Last time is :85鐩稿樊姣旇緝澶т笉鐭ラ亾涓轟粈涔?
Total time : 2506Total time : 2516xml鏂囦歡鎬諱綋涓婃參浜嗕竴鐐?/td>

聽聽 璇誨彇100嬈$殑姣旇緝:

浣跨敤Annotations 鐨勬祴璇曟暟鎹?/td>浣跨敤Xml鏂囦歡鐨勬祴璇曟暟鎹?/td>綆瑕佽鏄?/td>
Init time : 2437Init time : 2422鍜屽墠闈㈠垵濮嬪寲宸笉澶?/td>
Last time is :438Last time is :484鏈夋椂闂村樊
Total time : 2875Total time : 2906涔熸槸xml鏂囦歡鎬諱綋涓婃參浜嗕竴鐐?/td>

鎻掑叆100嬈$殑姣旇緝:

浣跨敤Annotations 鐨勬祴璇曟暟鎹?/td>浣跨敤Xml鏂囦歡鐨勬祴璇曟暟鎹?/td>綆瑕佽鏄?/td>
Init time : 2453Init time : 2469鍜屽墠闈㈠垵濮嬪寲宸笉澶?/td>
Last time is :469Last time is :656鏈夋椂闂村樊
Total time : 2922Total time : 3125涔熸槸xml鏂囦歡鎬諱綋涓婃參浜嗕竴鐐?/td>

浠庝笂闈㈢殑涓夋瀵規瘮涓ぇ瀹跺彲浠ョ湅鍒?鍒濆鍖栫殑閮ㄥ垎鍑犱箮涓よ呮槸涓鏍風殑, 鍦ㄦ暟鎹搷浣滀笂闈?浣跨敤xml鏂囦歡 鎬繪槸姣斾嬌鐢ˋnnotations 鎱竴鐐?鍦ㄦ垜浠彧鎿嶇旱涓涓彧鏈夊嚑涓睘鎬х殑灝忔寔涔呭寲綾葷殑鎿嶄綔涓氨鏈?鍑犲崄姣鐨勫樊璺? 鍑犲崄姣鍦ㄨ綆楁満涓畻涓嶇畻寰堝ぇ 澶у搴旇閮界煡閬?鎴戝氨涓嶅湪澶氳浜?

鎬葷粨: 緇忚繃 xml 鏂囦歡 鍜孉nnotations 鐨勪紭緙虹偣鍜?鎬ц兘涓婄殑瀵規瘮.鐜板湪浣跨敤閭d釜浣滀負浣犳寔涔呭寲鏄犲皠絳栫暐.鎴戠浉淇″ぇ瀹墮兘浼氭紜夋嫨鐨?

嫻嬭瘯鍚庤: 緇忚繃澶氭嫻嬭瘯 鎰熻鏈夋椂鍊欏緢涓嶇ǔ瀹?,鏈夌殑鏃跺欏緢紼沖畾涓嶇煡閬撴槸嫻嬭瘯鏈夐棶棰樿繕鏄埆鐨勯棶棰?澶у鍙互鑷繁嫻嬭瘯涓涓? 鏈変粈涔堟柊鐨勫彂鐜?璇峰ぇ瀹惰璁鴻璁?



Binary 2006-09-01 14:04 鍙戣〃璇勮
]]>
絎竴涓狧ibernate with Annotation紼嬪紡http://m.tkk7.com/lijiajia418/archive/2006/09/01/67092.htmlBinaryBinaryFri, 01 Sep 2006 06:00:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67092.htmlhttp://m.tkk7.com/lijiajia418/comments/67092.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67092.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67092.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67092.html Hibernate鏄疧RM鐨勮В鍐蟲柟妗堬紝鍏跺簳灞傚鏁版嵁搴撶殑鎿嶄綔渚濊禆浜嶫DBC錛屾墍浠ユ偍蹇呴』鍏堝彇寰桱DBC椹卞姩紼嬪簭錛屽湪榪欒竟鎵浣跨敤鐨勬槸MySQL錛屾墍浠ユ偍蹇呴』鑷?MySQL廬 Connector/J 鍙栧緱MySQL鐨凧DBC椹卞姩紼嬪簭銆?

鎺ヤ笅鏉ヨ嚦 Hibernate 瀹樻柟緗戠珯 鍙栧緱Hibernate 3.2銆?span style="COLOR: rgb(255,0,0)">Hibernate Annotations 3.2銆?

鎮ㄥ繀欏?span style="COLOR: rgb(255,0,0)">瀹夎JDK 5.0鎵嶅彲浠ヤ嬌鐢℉ibernate Annotations鐨勫姛鑳姐?

瑙e紑Hibernate 3.2鐨剒ip妗f鍚庯紝褰撲腑鐨刪ibernate3.jar鏄繀瑕佺殑錛岃屽湪lib鐩綍涓繕鍖呮嫭浜嗚澶歫ar妗f錛屾偍鍙互鍦?Hibernate 3.0瀹樻柟鐨勫弬鑰冩墜鍐?涓婃壘鍒拌繖浜沯ar鐨勭浉鍏寵鏄庯紝鍏朵腑蹇呰鐨勬槸 antlr銆乨om4j銆丆GLIB銆乤sm銆丆ommons Collections銆丆ommons Logging銆?EHCache錛孒ibernate搴曞眰榪橀渶瑕丣ava Transaction API錛屾墍浠ユ偍榪橀渶瑕乯ta.jar銆?

瑙e紑Hibernate Annotations 3.2鐨剒ip妗f鍚庯紝鎮ㄩ渶瑕乭ibernate-annotations.jar銆乪jb3-persistence.jar榪欎袱涓。妗堛?

鍒拌繖杈逛負姝紝鎬誨叡闇瑕佷互涓嬬殑jar妗f錛?br />

Hibernate鍙互榪愯浜庡崟鏈轟箣涓婏紝涔熷彲浠ヨ繍琛屼簬Web搴旂敤紼嬪簭涔嬩腑錛屽鏋滄槸榪愯浜庡崟鏈猴紝鍒欏皢鎵鏈夌敤鍒扮殑jar妗f錛堝寘鎷琂DBC椹卞姩紼嬪簭錛夎瀹氳嚦CLASSPATH涓紝濡傛灉鏄繍琛屼簬Web搴旂敤紼嬪簭涓紝鍒欏皢jar妗f緗斁浜嶹EB-INF/lib涓?br />
濡傛灉鎮ㄨ繕闇瑕侀澶栫殑Library錛屽啀渚濋渶姹傚姞鍏ワ紝渚嬪JUnit銆丳roxool絳夌瓑錛屾帴涓嬫潵鍙互灝唀tc鐩綍涓嬬殑 log4j.properties澶嶅埗鑷矵ibernate欏圭洰鐨凜lasspath涓嬶紝騫朵慨鏀逛竴涓嬪綋涓殑 log4j.logger.org.hibernate涓篹rror錛屼篃灝辨槸鍙湪鍦ㄩ敊璇彂鐢熸椂鏄劇ず蹇呰鐨勮鎭?br />
鎺ョ潃璁劇疆鍩烘湰鐨凥ibernate閰嶇疆鏂囦歡錛屽彲浠ヤ嬌鐢╔ML鎴朠roperties妗f錛岃繖杈瑰厛浣跨敤XML錛屾。鍚嶉璁句負hibernate.cfg.xml錛?br />
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
聽 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
聽 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
聽聽聽 <session-factory>
聽聽聽聽聽聽聽 <!-- 鏄劇ず瀹為檯鎿嶄綔鏁版嵁搴撴椂鐨凷QL -->
聽聽聽聽聽聽聽 <property name="show_sql">true</property>
聽聽聽聽聽聽聽 <!-- SQL鏂硅█錛岃繖杈硅瀹氱殑鏄疢ySQL -->
聽聽聽聽聽聽聽 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
聽聽聽聽聽聽聽 <!-- JDBC椹卞姩紼嬪簭 -->
聽聽聽聽聽聽聽 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
聽聽聽聽聽聽聽 <!-- JDBC URL -->
聽聽聽聽聽聽聽 <property name="connection.url">jdbc:mysql://localhost/demo</property>
聽聽聽聽聽聽聽 <!-- 鏁版嵁搴撲嬌鐢ㄨ?-->
聽聽聽聽聽聽聽 <property name="connection.username">root</property>
聽聽聽聽聽聽聽 <!-- 鏁版嵁搴撳瘑鐮?-->
聽聽聽聽聽聽聽 <property name="connection.password">123456</property>

聽聽聽聽聽聽聽 <!-- 浠ヤ笅璁劇疆瀵硅薄涓庢暟鎹簱琛ㄦ牸鏄犲儚綾誨埆 -->
聽聽聽聽聽聽聽 <mapping class="onlyfun.caterpillar.User"/>
聽聽聽 </session-factory>
</hibernate-configuration>

榪欒竟浠ヤ竴涓畝鍗曠殑鍗曟満紼嬪簭鏉ョず鑼僅ibernate鐨勯厤緗笌鍔熻兘錛岄鍏堜綔鏁版嵁搴撶殑鍑嗗宸ヤ綔錛屽湪MySQL涓柊澧炰竴涓猟emo鏁版嵁搴擄紝騫跺緩绔媢ser琛ㄦ牸錛?span class="javascript" id="text160062" style="FONT-WEIGHT: bold; FONT-FAMILY: Courier New">
CREATE TABLE user (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
name VARCHAR(100) NOT NULL default'',
age INT
);
瀵逛簬榪欎釜琛ㄦ牸錛屾偍鏈変竴涓猆ser綾誨埆涓庝箣瀵瑰簲錛岃〃鏍間腑鐨勬瘡涓涓瓧孌靛皢瀵瑰簲鑷砋ser瀹炰緥涓婄殑Field鎴愬憳銆?br />
package onlyfun.caterpillar;

import javax.persistence.*;

@Entity
@Table(name="user") // 闈炲繀瑕侊紝鍦ㄨ〃鏍煎悕縐頒笌綾誨埆鍚嶇О涓嶅悓鏃朵嬌鐢?/span>
public class User {
聽 @Id
聽 @GeneratedValue(strategy=GenerationType.AUTO)
聽聽聽 private Integer id;

聽 @Column(name="name") // 闈炲繀瑕侊紝鍦ㄥ瓧孌靛悕縐頒笌灞炴у悕縐頒笉鍚屾椂浣跨敤
聽聽聽 private String name;

聽 @Column(name="age")
聽聽聽 private Integer age; // 闈炲繀瑕侊紝鍦ㄥ瓧孌靛悕縐頒笌灞炴у悕縐頒笉鍚屾椂浣跨敤
聽聽聽
聽聽聽 // 蹇呴』瑕佹湁涓涓璁劇殑寤烘瀯鏂規硶
聽聽聽 // 浠ヤ嬌寰桯ibernate鍙互浣跨敤Constructor.newInstance()寤虹珛瀵硅薄
聽聽聽 public User() {
聽聽聽 }

聽聽聽 public Integer getId() {
聽聽聽聽聽聽聽 return id;
聽聽聽 }

聽聽聽 public void setId(Integer id) {
聽聽聽聽聽聽聽 this.id = id;
聽聽聽 }

聽聽聽 public String getName() {
聽聽聽聽聽聽聽 return name;
聽聽聽 }

聽聽聽 public void setName(String name) {
聽聽聽聽聽聽聽 this.name = name;
聽聽聽 }
聽聽聽
聽聽聽 public Integer getAge() {
聽聽聽聽聽聽聽 return age;
聽聽聽 }

聽聽聽 public void setAge(Integer age) {
聽聽聽聽聽聽聽 this.age = age;
聽聽聽 }
}

鍏朵腑id鏄釜鐗規畩鐨勫睘鎬э紝Hibernate浼氫嬌鐢ㄥ畠鏉ヤ綔涓轟富閿瘑鍒紝鎮ㄥ彲浠ュ畾涔変富閿駭鐢熺殑鏂瑰紡錛岃繖杈硅瀹氫負鑷姩浜х敓涓婚敭錛屽彲浠ョ湅鍒幫紝瀹炰綋鏍囪瘑錛屼富閿敓鎴愶紝浠ュ強鐩稿叧鏄犲儚錛岄兘鍙互浣跨敤Annotation鏉ュ畬鎴愩?

鎺ヤ笅鏉ユ挵鍐欎竴涓祴璇曠殑紼嬪簭錛岃繖涓▼搴忕洿鎺ヤ互Java紼嬪簭璁捐浜哄憳鐔熸倝鐨勮娉曟柟寮忔潵鎿嶄綔瀵硅薄錛岃屽疄闄呬笂涔熺洿鎺ュ畬鎴愬鏁版嵁搴撶殑鎿嶄綔錛岀▼搴忓皢浼氬皢涓絎旀暟鎹瓨鍏ヨ〃鏍間箣涓細
package onlyfun.caterpillar;

import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateAnnotationDemo {

聽聽聽 public static void main(String[] args) {
聽聽聽聽聽聽聽 // 闇瑕丄nnotationConfiguration璇誨彇Annotation璁伅
聽聽聽聽聽聽聽 Configuration config = new AnnotationConfiguration().configure();
聽聽聽聽聽聽聽 // 鏍規嵁 config 寤虹珛 SessionFactory
聽聽聽聽聽聽聽 // SessionFactory 灝嗙敤浜庡緩绔?Session
聽聽聽聽聽聽聽 SessionFactory sessionFactory = config.buildSessionFactory();

聽聽聽聽聽聽聽 // 灝嗘寔涔呭寲鐨勭墿浠?/span>
聽聽聽聽聽聽聽 User user = new User();
聽聽聽聽聽聽聽 user.setName("caterpillar");
聽聽聽聽聽聽聽 user.setAge(new Integer(30));聽聽聽聽

聽聽聽聽聽聽聽 // 寮鍚疭ession錛岀浉褰撲簬寮鍚疛DBC鐨凜onnection
聽聽聽聽聽聽聽 Session session = sessionFactory.openSession();
聽聽聽聽聽聽聽 // Transaction琛ㄧず涓緇勪細璇濇搷浣?/span>
聽聽聽聽聽聽聽 Transaction tx= session.beginTransaction();
聽聽聽聽聽聽聽 // 灝嗗璞℃槧鍍忚嚦鏁版嵁搴撹〃鏍間腑鍌ㄥ瓨
聽聽聽聽聽聽聽 session.save(user);
聽聽聽聽聽聽聽 tx.commit();
聽聽聽聽聽聽聽 session.close();
聽聽聽聽聽聽聽 sessionFactory.close();
聽聽聽聽聽聽
聽聽聽聽聽聽聽 System.out.println("鏂板璧勬枡OK!璇峰厛鐢∕ySQL瑙傜湅緇撴灉錛?);
聽聽聽 }
}

娉ㄦ剰錛屼嬌鐢ˋnnotation鏃訛紝闇瑕佺殑鏄疉nnotationConfiguration綾誨埆銆?

濡傛偍鎵鐪嬪埌鐨勶紝紼嬪簭涓彧闇瑕佺洿鎺ユ搷浣淯ser瀵硅薄錛屽茍榪涜Session涓嶵ransaction鐨勭浉鍏蟲搷浣滐紝Hibernate灝變細鑷姩瀹屾垚瀵規暟鎹簱鐨勬搷浣滐紝鎮ㄧ湅涓嶅埌浠諱綍涓琛孞DBC鎴朣QL鐨勯檲榪幫紝鎾板啓濂戒互涓婄殑鍚勪釜妗f涔嬪悗錛屽悇妗f鐨勬斁緗綅緗涓嬶細


鎺ョ潃鍙互寮濮嬭繍琛岀▼搴忥紝緇撴灉濡備笅錛?br />
Hibernate: insert into user (name, age) values (?, ?)
鏂板璧勬枡OK!璇峰厛鐢∕ySQL瑙傜湅緇撴灉錛?/span>

鎵ц緇撴灉涓樉紺轟簡Hibernate鎵瀹為檯浣跨敤鐨凷QL錛岀敱浜庤繖涓▼搴忚繕娌℃湁鏌ヨ鍔熻兘錛屾墍浠ヨ榪涘叆MySQL涓湅鐪嬫柊澧炵殑鏁版嵁錛屽涓嬶細
mysql> select * from user;
+----+-----------------+------+
| id聽聽聽 | name聽聽聽聽聽聽聽聽 | age聽 |
+----+-----------------+------+
|聽 1聽聽聽 | caterpillar聽 | 30聽聽 |
+----+-----------------+------+
1 row in set (0.03 sec)


Binary 2006-09-01 14:00 鍙戣〃璇勮
]]>
Hibernate Annotations 瀹炴垬http://m.tkk7.com/lijiajia418/archive/2006/09/01/67090.htmlBinaryBinaryFri, 01 Sep 2006 05:59:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67090.htmlhttp://m.tkk7.com/lijiajia418/comments/67090.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67090.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67090.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67090.html闃呰鍏ㄦ枃

Binary 2006-09-01 13:59 鍙戣〃璇勮
]]>
鍦╢ilter涓棞闁塻essionhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67085.htmlBinaryBinaryFri, 01 Sep 2006 05:51:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67085.htmlhttp://m.tkk7.com/lijiajia418/comments/67085.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67085.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67085.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67085.html鍒╃敤Thread-Specific Storage鎾板涓鍊婬ibernateUtil

HibernateSessionUtil.java
								import java.io.Serializable;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;

public class HibernateSessionUtil implements Serializable
{
publicstaticfinal ThreadLocal tLocalsess = new ThreadLocal();

publicstaticfinal ThreadLocal tLocaltx = new ThreadLocal();

/*
* getting the thread-safe session for using
*/
publicstatic Session currentSession(){
Session session = (Session) tLocalsess.get();

//open a new one, if none can be found.
try{
if (session == null){
session = openSession();
tLocalsess.set(session);
}
}catch (HibernateException e){
thrownew InfrastructureException(e);
}
return session;
}

/*
* closing the thread-safe session
*/
publicstatic void closeSession(){

Session session = (Session) tLocalsess.get();
tLocalsess.set(null);
try{
if (session != null && session.isOpen()){
session.close();
}

}catch (HibernateException e){
thrownew InfrastructureException(e);
}
}

/*
* begin the transaction
*/
publicstatic void beginTransaction(){
Transaction tx = (Transaction) tLocaltx.get();
try{
if (tx == null){
tx = currentSession().beginTransaction();
tLocaltx.set(tx);
}
}catch (HibernateException e){
thrownew InfrastructureException(e);
}
}

/*
* close the transaction
*/
publicstatic void commitTransaction(){
Transaction tx = (Transaction) tLocaltx.get();
try{
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack())
tx.commit();
tLocaltx.set(null);
}catch (HibernateException e){
thrownew InfrastructureException(e);
}
}

/*
* for rollbacking
*/
publicstatic void rollbackTransaction(){
Transaction tx = (Transaction) tLocaltx.get();
try{
tLocaltx.set(null);
if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
tx.rollback();
}
}catch (HibernateException e){
thrownew InfrastructureException(e);
}
}

privatestatic Session openSession() throws HibernateException{
return getSessionFactory().openSession();
}

privatestatic SessionFactory getSessionFactory() throws HibernateException{
return SingletonSessionFactory.getInstance();
}
}

銆filter涓殑紼嬪紡紕煎涓?/p>

HibernateSessionCloser.java
								public class HibernateSessionCloser implements Filter{

protected FilterConfig filterConfig = null;

public void init(FilterConfig filterConfig)throws ServletException{
this.filterConfig = filterConfig;
}

public void destroy(){
this.filterConfig = null;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
try{
chain.doFilter(request, response);
}
finally{
try{
HibernateSessionUtil.commitTransaction();
}catch (InfrastructureException e){
HibernateSessionUtil.rollbackTransaction();
}finally{
HibernateSessionUtil.closeSession();
}
}

}
}

鐒跺緦鍦ㄦ搷浣滆硣鏂欏韓涔嬪墠鍔犱笂

HibernateSessionUtil.beginTransaction();
HibernateSessionUtil.currentSession();//鍙栧緱Session


Binary 2006-09-01 13:51 鍙戣〃璇勮
]]>
acegi-security-sample-contacts-filter渚嬪瓙瀛︿範(浜?http://m.tkk7.com/lijiajia418/archive/2006/09/01/67083.htmlBinaryBinaryFri, 01 Sep 2006 05:45:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67083.htmlhttp://m.tkk7.com/lijiajia418/comments/67083.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67083.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67083.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67083.html鍔熻兘瀹炵幇鍒嗘瀽

榪欎釜渚嬪瓙浣跨敤浜咹SQL鍋氭暟鎹簱錛宻pring鐨凙OP浣滀負鍩虹錛屼嬌鐢ˋcegi鍋氬畨鍏ㄦ帶鍒剁粍浠躲?br />鑱旂郴浜虹鐞嗙殑web搴旂敤鍦ㄥ惎鍔ㄦ椂鍊欙紝浼氬仛涓緋誨垪鍒濆鍖栧姩浣滐細
1. 璇誨彇web.xml鏂囦歡錛?/p>

2. 騫惰В鏋愭枃浠墮噷鐨勫唴瀹廣?br />a) context-param鍏冪礌銆?br />i. contextConfigLocation灞炴с傝繖涓睘鎬у畾涔変簡spring鎵闇瑕佺殑3涓睘鎬ф枃浠躲傚畠浠垎鍒槸錛歛pplicationContext -acegi-security.xml銆乤pplicationContext-common-business.xml銆?applicationContext-common-authorization.xml
ii. log4jConfigLocation灞炴с傝繖涓睘鎬у畾涔変簡log4j閰嶇疆鏂囦歡銆?/p>

b) filter鍏冪礌銆?br />榪欓噷瀹氫箟浜哸cegi鐨勪竴涓繃婊ゅ櫒銆侫cegi鐨勫ぇ閮ㄥ垎榪囨護鍣ㄩ兘鏄繖鏍烽厤緗殑銆備嬌鐢‵ilterToBeanProxy緇勪歡錛岀粰瀹冧紶閫掍竴涓猼argetClass灞炴с傝繖涓猼argetClass蹇呴』瀹炵幇javax.servlet.Filter鎺ュ彛銆?br />榪欓噷閰嶇疆鐨勬槸FilterChainProxy銆傝繖涓狥ilterChainProxy姣旇緝濂界敤錛屽彲浠ヤ負瀹冨畾涔変竴涓瞗ilter灞炴с傝繖浜沠ilter灝嗕細鎸夌収瀹氫箟鐨勯『搴忚璋冪敤銆備緥濡傦紝
<bean id="filterChainProxy" class="net.sf.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
</value>
</property>
</bean>
榪欎釜榪囨護鍣ㄧ殑mapping鏄?*鈥濄?br />c) listener鍏冪礌銆?br />i. ContextLoaderListener銆傝繖涓槸Spring浣跨敤鏉ュ姞杞芥牴applicationcontext銆傚茍鍒嗗埆瑙f瀽 applicationContext-acegi-security.xml銆乤pplicationContext-common- business.xml銆乤pplicationContext-common-authorization.xml絳夐厤緗枃浠訛紝鎶婄浉鍏崇殑瀵硅薄鍒濆鍖?br />iii. Log4jConfigListener銆傝繖涓槸spring鐢ㄦ潵鍒濆鍖杔og4j緇勪歡鐨刲istener銆?br />iv. HttpSessionEventPublisher銆傝繖涓粍浠跺皢鍙戝竷HttpSessionCreatedEvent鍜孒ttpSessionDestroyedEvent浜嬩歡緇檚pring鐨刟pplicationcontext銆?br />d) servlet鍏冪礌銆?br />i. contacts銆傝繖閲岄噰鐢ㄤ簡spring鐨凪VC妗嗘灦錛?鎵浠ヨ繖涓猻ervlet鏄痵pring MVC鐨勪竴涓牳蹇冩帶鍒跺櫒錛坥rg.springframework.web.servlet.DispatcherServlet錛夈傝繖涓猻ervlet 鍚姩鏃跺欙紝浼氫粠contacts-servlet.xml閲岄潰璇誨彇淇℃伅錛屽茍鍋氱浉鍏崇殑鍒濆鍖栥?br />v. remoting銆備篃鏄痵pring MVC鐨勪竴涓牳蹇冩帶鍒跺櫒銆備笌contacts涓嶅悓錛岃繖涓猻ervlet涓昏鏄彁渚泈eb services鏈嶅姟銆傝繖涓猻ervlet鍚姩鏃跺欙紝 浼氫粠remoting-servlet.xml閲岄潰璇誨彇淇℃伅錛屽茍鍋氱浉鍏崇殑鍒濆鍖栥?br />e) taglib鍏冪礌銆傝繖閲屽畾涔変簡spring鐨勬爣f) 絳懼簱銆?br />3. 瑙f瀽applicationContext-acegi-security.xml銆?br />a) 榪囨護鍣ㄩ摼銆傚畾涔変簡涓涓狥ilterChainProxy錛宐) 騫舵寚c) 瀹氫簡涓緋誨垪鐨勮繃婊ゅ櫒閾俱俬ttpSessionContextIntegrationFilter, authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
d) 璁よ瘉綆$悊鍣ㄣ傝繖涓鐞嗗櫒鐢盿cegi鎻愪緵銆傝繖涓鐞嗗櫒闇瑕佷竴涓猵roviders鍙傛暟銆傝繖涓猵roviders鍙傛暟鍖呭惈浜嗘彁渚涚郴緇熻璇佺殑瀵硅薄銆?br />i. daoAuthenticationProvider銆備竴鑸敤鎴瘋璇併?br />ii. anonymousAuthenticationProvider銆傚尶鍚嶇敤鎴瘋璇併?br />iv. rememberMeAuthenticationProvider銆傝浣忔垜璁よ瘉銆?/p>

e) 瀵嗙爜鍔犲瘑銆傝繖閲屽畾涔変簡涓涓猘cegi鐨凪d5綆楁硶鍔犲瘑瀵硅薄Md5PasswordEncoder銆?br />f) 瀹氫箟浜嗕竴涓猨dbcDao瀹炵幇綾匯傝繖涓被鐢盿cegi鎻愪緵鐨刵et.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl銆傝繖涓璞¢渶瑕佷竴涓猟ataSource鐨勫弬鏁般?br />g) 瀹氫箟daoAuthenticationProvider銆傝繖涓璞$敱acegi鎻愪緵銆傚畠鏈?涓睘鎬э細
authenticationDao銆傝繖閲屾寚鍚戝墠闈㈠畾涔夌殑jdbcDao銆?br />userCache銆傝繖閲屾寚鍚戝悗闈㈠畾涔夌殑user緙撳瓨瀵硅薄銆?br />passwordEncoder銆傝繖閲屾寚鍚戝墠闈㈠畾涔夌殑瀵嗙爜鍔犲瘑瀵硅薄銆?br />h) 鐢ㄦ埛緙撳瓨綆$悊銆?br />涓轟簡緙撳瓨user錛岃繖閲屼嬌鐢╯pring鐨別hcache鏉ョ紦瀛榰ser銆傜紦瀛樻満鍒訛細
i. 瀹氫箟緙撳瓨綆$悊鍣ㄢ曗旵acheManager銆傝繖涓璞℃槸spring鐨凟hCacheManagerFactoryBean瀵硅薄
ii. 瀹氫箟user緙撳瓨瀹為檯鎵ц瀵硅薄鈥曗昒serCacheBackend銆傝繖涓璞℃槸spring鐨凟hCacheFactoryBean銆傚畠鏈変袱涓睘鎬э細
1. cacheManager銆傝繖閲屾寚鍚戝墠闈㈠畾涔夌殑緙撳瓨綆$悊鍣ㄣ?br />2. cacheName銆?br />iii. 瀹氫箟user緙撳瓨鈥曗昒serCache銆傚畠鏄痑cegi鎻愪緵鐨凟hCacheBasedUserCache瀵硅薄銆傚畠鏈変竴涓睘鎬э細
1. cache銆傝繖閲屾寚鍚戠殑鏄墠闈㈠畾涔夌殑userCacheBackend銆?/p>

i) 瀹氫箟鎺ユ敹鏉ヨ嚜DaoAuthenticationProvider鐨勮璇佷簨浠剁殑listener鈥曗昄oggerListener銆?br />j)
4. 瑙f瀽applicationContext-common-business.xml銆?br />a) dataSource.
榪欓噷浣跨敤浜唖pring鐨凞riverManagerDataSource瀵硅薄銆傝繖涓璞℃槸涓涓狫DBC鏁版嵁婧愮殑瀹氫箟銆?br />b) TransactionManager銆傝繖閲屼嬌鐢╯pring鐨凞ataSourceTransactionManager瀵硅薄銆?br />c) 浜嬪姟鎷︽埅鍣ㄣ傝繖閲屼嬌鐢╯pring鐨勪簨鍔℃嫤鎴櫒TransactionInterceptor銆傚畠鏈?涓睘鎬э細
transactionManager銆傝繖涓睘鎬ф寚鍚戝墠闈㈠畾涔夌殑TransactionManager銆?br />transactionAttributeSource銆傝繖涓睘鎬ч噷錛?鎸囧畾浜咰ontactManager鐨勫悇涓柟娉曠殑浜嬪姟鏂歸潰鐨勮姹傘?br />d) DataSourcePopulator銆?br />浣跨敤sample.contact.DataSourcePopulator瀵硅薄錛屽線HSQL閲屽垱寤虹浉鍏崇殑琛ㄧ粨鏋勫拰鏁版嵁銆?br />瀹炵幇鍘熺悊錛欴ataSourcePopulator 瀹炵幇浜嗘帴鍙?InitializingBean銆傚叾涓璦fterPropertiesSet鏂規硶灝嗗湪spring鍒濆鍖朌ataSourcePopulator鍚庤璋冪敤銆?br />e) ContactDao銆傝繖閲屾寚鍚戜竴涓狢ontactDaoSpring瀵硅薄銆傚畠緇ф壙spring鐨?JdbcDaoSupport錛実) 騫跺疄鐜癈ontactDao鎺ュ彛銆傚畠鏄湡姝e疄鐜癑DBC鎿嶄綔鐨勫璞°?br />h) ContactManager銆傝繖閲屼嬌鐢ㄧ殑鏄痵pring鐨凱roxyFactoryBean銆傚畠鏈?涓睘鎬э細
i. ProxyInterfaces銆備唬鐞嗘帴鍙o細sample.contact.ContactManager

ii. InterceptorNames銆傛嫤鎴櫒鍚嶇О銆傚彲浠ユ湁澶氫釜錛宨v. 榪欓噷鍖呮嫭錛歵ransactionInterceptor銆乧ontactManagerSecurity銆乧ontactManagerTarget銆傚叾涓紝v. transactionInterceptor鏄墠闈㈠畾涔夌殑浜嬪姟鎷︽埅鍣ㄣ侰ontactManagerSecurity鍒欐槸鍦?applicationContext-common-authorization.xml閲屽畾涔夌殑鏂規硶璋冪敤鎺堟潈銆?br />i) ContactManagerTarget銆傝繖閲屾寚鍚戠殑鏄痵ample.contact.ContactManagerBackend瀵硅薄銆?ContactManagerBackend瀹炵幇浜咰ontactManager鎺ュ彛鍜孖nitializingBean鎺ュ彛銆傚畠鏈?涓嚜瀹氫箟灞炴э細 contactDao鍜宐asicAclExtendedDao銆傝繖閲屼細璋冪敤ACL鐨凙PI鍘誨仛浜涘垱寤烘潈闄愬拰鍒犻櫎鏉冮檺鐨勫伐浣溿?/p>

Binary 2006-09-01 13:45 鍙戣〃璇勮
]]>
acegi-security-sample-contacts-filter渚嬪瓙瀛︿範(涓)http://m.tkk7.com/lijiajia418/archive/2006/09/01/67082.htmlBinaryBinaryFri, 01 Sep 2006 05:44:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67082.htmlhttp://m.tkk7.com/lijiajia418/comments/67082.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67082.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67082.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67082.html 榪欐槸涓涓?/span> Acegi 瀹樻柟鐨勪緥瀛愩傚畠浠ヨ仈緋諱漢鐨勭鐞嗕負渚嬪瓙錛岃鏄庡浣曚嬌鐢?/span> Acegi 浣滄潈闄愭帶鍒躲傝繖涓緥瀛愬寘鍚湪 acegi 鐨勫寘閲岄潰銆備笅杞藉湴鍧錛?/span> http://prdownloads.sourceforge.net/acegisecurity/acegi-security-0.8.3.zip?download銆?/span>

鑱旂郴浜虹鐞嗚鏄庝簡涓嬪垪涓績鐨?span lang="EN-US">Acegi瀹夊叏鎺у埗鑳藉姏:

  • Role-based security 錛堝熀浜庤鑹茬殑瀹夊叏錛?/span> 鈥曗曟瘡涓矗浠諱漢閮芥槸鏌愪釜瑙掕壊鐨勪竴鍛樸傝岃鑹茶鐢ㄦ潵闄愬埗瀵規煇浜涘畨鍏ㄥ璞$殑璁塊棶銆?/span>
  • Domain object instance security 錛堝煙瀵硅薄瀹炰緥瀹夊叏錛?/span> 鈥曗曞悎鍚岋紝榪欎釜緋葷粺閲岀殑涓昏鍩熷璞★紝鎷ユ湁涓涓闂帶鍒跺垪琛紙 ACL 錛夛紝鐢ㄦ潵鎸囨槑璋佸厑璁歌銆佺鐞嗗拰鍒犻櫎瀵硅薄銆?/span>
  • Method invocation security 錛堟柟娉曡皟鐢ㄥ畨鍏級鈥曗?/span> 榪欎釜 ContactManager 鏈嶅姟灞傚璞?/span> 鍖呭惈涓浜涘彈淇濇姢鐨勫拰鍏紑鐨勬柟娉曘?/span>
  • Web request security 錛?/span> Web 璇鋒眰瀹夊叏錛?/span> 鈥曗曡繖涓?/span> /secure 鈥?/span> URI 璺緞琚嬌鐢?/span> Acegi 瀹夊叏淇濇姢錛屼嬌寰楁病鏈?/span> ROLE_USER 瑙掕壊鐨勭敤鎴鋒棤娉曡闂?/span> .
  • Security unaware application objects 錛堜繚鎶ゆ湭鐭ョ殑搴旂敤瀵硅薄錛?/span> 鈥曗曞彈淇濇姢鐨勫璞′笌 Acegi 涔嬮棿娌℃湁鏄庢樉鐨勮﹀悎鎴栧綰︼紝鎵浠ュ畠浠病鏈夊療瑙夊埌瀹夊叏鏄敱 Acegi 鎻愪緵鐨勩?/span> *
  • Security taglib usage 錛堝畨鍏ㄦ爣絳懼簱浣跨敤錛?/span> 鈥曗曟墍鏈夌殑 JSP 浣跨敤 Acegi 瀹夊叏鏍囩搴撴潵灝佽瀹夊叏淇℃伅銆?/span> *
  • Fully declarative security( 瀹屽叏澹版槑寮忕殑瀹夊叏 ) 鈥曗曟瘡涓涓畨鍏ㄦ柟闈㈢壒鎬ч兘鏄湪 application context 閲岄潰浣跨敤鏍囧噯鐨?/span> Acegi 瀹夊叏瀵硅薄鏉ラ厤緗殑銆?/span> *
  • Database-sourced security data 錛堟敮鎸佹暟鎹簱鏉ユ簮鐨勫畨鍏ㄦ暟鎹級 鈥曗曟墍鏈夌殑鐢ㄦ埛銆佽鑹插拰 ACL 淇℃伅閮藉彲浠ヤ粠涓涓吋瀹?/span> JDBC 鐨勫唴瀛樻暟鎹簱鑾峰緱銆?/span>
  • Integrated form-based and BASIC authentication 錛堥泦鎴愬熀浜庤〃鍗曞拰 BASIC 楠岃瘉錛夆曗?/span> 浠諱綍 BASIC 楠岃瘉澶撮儴琚嫻嬩互鍙婁綔涓洪獙璇佷嬌鐢ㄣ傞粯璁や嬌鐢ㄥ熀浜庤〃鍗曠殑鏅氫氦浜掑紡楠岃瘉銆?/span>
  • Remember-me services 錛堣浣忔垜鐨勬湇鍔★級鈥曗?/span> Acegi 瀹夊叏鐨勬彃浠跺紡鐨勨?/span> remember-me 鈥?/span> 絳栫暐琚紨紺恒傚湪鐧誨綍琛ㄥ崟閲屾湁涓涓浉鍏崇殑閫夋嫨妗嗕笌涔嬪搴斻?/span>

鑱旂郴浜虹鐞嗙殑涓氬姟鍔熻兘鎻忚堪錛?/span>

1.1. 姣忎釜鐢ㄦ埛鐧誨綍鍚庯紝鍙互鐪嬪埌涓涓仈緋諱漢鍒楄〃銆備緥濡傦紝

marissa's Contacts

id

Name

Email

1

John Smith

john@somewhere.com

Del

Admin Permission

2

Michael Citizen

michael@xyz.com



3

Joe Bloggs

joe@demo.com

Del


4

Karen Sutherland

karen@sutherland.com

Del

Admin Permission

Add

璇存槑錛氱敤鎴鋒病鏈夋潈闄愯闂殑鑱旂郴浜轟俊鎭紝灝嗕笉浼氭樉紺恒?/span>

2.2. 鐢ㄦ埛鍙互澧炲姞鏂扮殑鑱旂郴浜轟俊鎭?/span>

3.3. 濡傛灉鏈夊垹闄ゆ潈闄愶紝鐢ㄦ埛鍙互鐪嬪埌鍦ㄨ仈緋諱漢鍚庨潰鏈変竴涓?/span> Del 鈥濋摼鎺ャ傜敤鎴峰彲浠ョ偣鍑昏繖涓摼鎺ユ潵鍒犻櫎鏌愪釜鑱旂郴浜轟俊鎭?/span>

4.4. 濡傛灉鏈夌鐞嗘潈闄愶紝鐢ㄦ埛鍙互鐪嬪埌鍦ㄨ仈緋諱漢鍚庨潰鏈変竴涓?/span> Admin Permission 鈥濋摼鎺ャ傜敤鎴峰彲浠ョ偣鍑昏繖涓摼鎺ユ潵綆$悊璁塊棶榪欎釜鑱旂郴浜虹殑鏉冮檺銆備緥濡傦紝

Administer Permissions

sample.contact.Contact@26807f: Id: 1; Name: John Smith; Email: john@somewhere.com

-R--- [2] dianne

Del

-RW-D [22] peter

Del

A---- [1] marissa

Del

Add Permission Manage

璇存槑錛氭瘡涓琛岃褰曞寘鍚湁 3 鍒椼?/span>

絎竴鍒楄〃紺烘潈闄愶紝渚嬪錛屸?/span> -RW-D 鈥濊〃紺哄彲璇匯佸彲鍐欍佸彲鍒犻櫎銆?/span>

絎簩鍒椾篃琛ㄧず鏉冮檺錛屼絾瀹冩槸浠ョ被浼?/span> unix 鏉冮檺鐨勬暟瀛楄〃杈俱備緥濡傦紝鈥?/span> [22] 鈥?/span> , 琛ㄧず鍙銆佸彲鍐欍佸彲鍒犻櫎銆?/span>

絎笁鍒楁槸鐢ㄦ埛鍚嶇О銆?/span>

姣忎竴琛岃褰曞悗闈㈤兘鏈変竴涓?/span> Del 鈥濋摼鎺ャ傜偣鍑昏繖涓摼鎺ワ紝鍙互鍒犻櫎鎺夋寚瀹氱敤鎴峰榪欎釜鑱旂郴浜轟俊鎭殑鏉冮檺銆?/span>

5.5. 鐢ㄦ埛鍙互涓烘煇涓仈緋諱漢淇℃伅娣誨姞鏉冮檺銆備緥濡傦紝

Add Permission

Contact:

sample.contact.Contact@1787005: Id: 1; Name: John Smith; Email: john@somewhere.com


Recipient:


Permission:


璇存槑錛氭潈闄愭槸鍔ㄦ佹坊鍔犵殑銆備緥濡傦紝涓婂浘涓粰鐢ㄦ埛 scott 澧炲姞浜嗚鑱旂郴浜?/span> John 鐨勬潈闄愩傞偅涔?/span> scott 椹笂灝卞彲浠ョ湅鍒拌仈緋諱漢 John 鐨勪俊鎭簡銆?/span>

Binary 2006-09-01 13:44 鍙戣〃璇勮
]]>
WebWork鏁欑▼錛峉ervletDispatcherhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67077.htmlBinaryBinaryFri, 01 Sep 2006 05:41:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67077.htmlhttp://m.tkk7.com/lijiajia418/comments/67077.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67077.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67077.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67077.html闃呰鍏ㄦ枃

Binary 2006-09-01 13:41 鍙戣〃璇勮
]]>
WebWork鏁欑▼錛峷alidatorhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67076.htmlBinaryBinaryFri, 01 Sep 2006 05:40:00 GMThttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67076.htmlhttp://m.tkk7.com/lijiajia418/comments/67076.htmlhttp://m.tkk7.com/lijiajia418/archive/2006/09/01/67076.html#Feedback0http://m.tkk7.com/lijiajia418/comments/commentRss/67076.htmlhttp://m.tkk7.com/lijiajia418/services/trackbacks/67076.html 楠岃瘉妗嗘灦
WebWork 鎻愪緵浜嗗湪 Action 鎵ц涔嬪墠錛屽杈撳叆鏁版嵁鐨勯獙璇佸姛鑳斤紝瀹冧嬌鐢ㄤ簡鍏舵牳蹇?/span> XWork 鐨勯獙璇佹鏋躲傛彁渚涗簡濡備笅鍔熻兘錛?/span>
1銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 鍙厤緗殑楠岃瘉鏂囦歡銆傚畠鐨勯獙璇佹枃浠舵槸涓涓嫭绔嬬殑 XML 閰嶇疆鏂囦歡錛屽楠岃瘉鐨勬坊鍔犮佷慨鏀瑰彧闇鏇存敼閰嶇疆鏂囦歡錛屾棤闇緙栬瘧浠諱綍鐨?/span> Class 銆?/span>
2銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 楠岃瘉鏂囦歡鍜岃楠岃瘉鐨勫璞″畬鍏ㄨВ钘曘傞獙璇佸璞℃槸鏅氱殑 JavaBean 灝卞彲浠ヤ簡錛堝彲浠ユ槸 FormBean 銆佸煙瀵硅薄絳夛級錛屽畠浠笉闇瀹炵幇浠諱綍棰濆鐨勬柟娉曟垨緇ф壙棰濆鐨勭被銆?/span>
3銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 澶氱涓嶅悓鐨勯獙璇佹柟寮忋傚洜涓哄畠楠岃瘉鍔熻兘鏄彲浠ョ戶鎵跨殑錛屾墍浠ュ彲浠ョ敤澶氱涓嶅悓鐨勬柟寮忔寚瀹氶獙璇佹枃浠訛紝姣斿錛氶氳繃鐖剁被鐨?/span> Action 銆侀氳繃 Action 銆侀氳繃 Action 鐨勬柟娉曘侀氳繃 Action 鎵浣跨敤鐨勫璞★紝絳夌瓑銆?/span>
4銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 寮哄ぇ鐨勮〃杈懼紡楠岃瘉銆傚畠浣跨敤浜?/span> OGNL 鐨勮〃杈懼紡璇█錛屾彁渚涘己澶х殑琛ㄨ揪寮忛獙璇佸姛鑳姐?/span>
5銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 鍚屾椂鏀寔鏈嶅姟鍣ㄧ鍜屽鎴風楠岃瘉銆?/span>
涓嬮潰鎴戜滑鏉ョ湅鐪嬪浣曚負鐢ㄦ埛娉ㄥ唽娣誨姞楠岃瘉鍔熻兘錛?/span>
1銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 娉ㄥ唽鎴戜滑鐨勯獙璇佺被鍨?/span>
WebWork 涓轟笉鍚岀殑楠岃瘉瑕佹眰鎻愪緵涓嶅悓鐨勯獙璇佺被鍨嬨備竴涓獙璇佺被鍨嬶紝涓鑸槸鏈変竴涓被鏉ユ彁渚涖傝繖涓被蹇呴』瀹炵幇鎺ュ彛錛?/span> com.opensymphony.xwork.validator.Validator 錛屼絾鎴戜滑鍦ㄥ啓鑷繁鐨勯獙璇佺被鍨嬫椂錛屾棤闇鐩存帴瀹炵幇 Validator 鎺ュ彛錛屽畠鏈夋娊璞$被鍙緵鐩存帴浣跨敤濡?/span> ValidatorSupport 銆?/span> FieldValidatorSupport 絳夈?/span>
楠岃瘉綾誨瀷鍦ㄤ嬌鐢ㄤ箣鍓嶏紝蹇呴』瑕佸湪 ValidatorFactory 錛?/span> com.opensymphony.xwork.validator . ValidatorFactory 錛変腑 娉ㄥ唽銆傚彲浠ユ湁浜岀鏂規硶瀹炵幇楠岃瘉綾誨瀷鐨勬敞鍐屻備竴銆佸啓紼嬪簭浠g爜榪涜娉ㄥ唽錛屽畠浣跨敤 ValidatorFactory 綾葷殑闈欐佹柟娉曪細 registerValidator(String name, String className) 銆?/span> 浜屻佷嬌鐢ㄩ厤緗枃浠?/span> validators.xml 榪涜娉ㄥ唽錛岃姹傛妸鏂囦歡 validators.xml 鏀懼埌 ClassPath 鐨勮窡鐩綍涓紙 /WEB-INF/classes 錛夈備絾鍦ㄥ疄闄呭紑鍙戜腑錛屼竴鑸兘浣跨敤絎簩涓敞鍐屾柟娉曘傛垜浠殑楠岃瘉綾誨瀷娉ㄥ唽濡備笅錛?/span>
<validators>
聽聽聽 <validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
聽聽 聽<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
聽聽聽 <validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
聽聽聽 <validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
聽聽聽 <validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
聽聽聽 <validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
聽聽聽 <validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
聽聽聽 <validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
聽聽聽 <validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
聽聽聽 <validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
聽聽聽 <validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
</validators>
娉ㄥ唽楠岃瘉綾誨瀷鐨勯厤緗枃浠墮潪甯哥畝鍗曘傚畠浣跨敤鏍囩 <validator > 鎻愪緵鍚嶏紞鍊煎鐨勫艦寮忔敞鍐屻傝繖鏍鋒垜浠殑楠岃瘉鏂囦歡灝卞彲浠ョ洿鎺ュ紩鐢ㄥ畠鐨勫悕瀛椼?/span>
2銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 寮鍚?/span> Action 鐨勯獙璇佸姛鑳?/span>
濡傛灉 Action 瑕佷嬌鐢ㄩ獙璇佹鏋剁殑楠岃瘉鍔熻兘錛屽畠蹇呴』鍦ㄩ厤緗枃浠朵腑鎸囧畾鎷︽埅鍣ㄢ?/span> validation 鈥濓紝瀹冪殑瀹氫箟濡備笅錛?/span>
<interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/> 銆?/span>
鎴戜滑鐨勯獙璇佹枃浠跺繀欏諱互 ActionName-validation.xml 鏍煎紡鍛藉悕錛屽畠蹇呴』琚斁緗埌涓庤繖涓?/span> Action 鐩稿悓鐨勫寘涓備綘涔熷彲浠ヤ負榪欎釜 Action 閫氳繃鍒悕鐨勬柟寮忔寚瀹氶獙璇佹枃浠訛紝瀹冪殑鍛藉悕鏍煎紡涓猴細 ActionName-aliasname-validation.xml 銆傗?/span> ActionName 鈥濇槸鎴戜滑 Action 鐨勭被鍚嶏紱鈥?/span> aliasname 鈥濇槸鎴戜滑鍦ㄩ厤緗枃浠訛紙 xwork.xml 錛変腑瀹氫箟榪欎釜 Action 鎵鐢ㄥ埌鐨勫悕縐般傝繖鏍鳳紝鍚屼竴涓?/span> Action 綾伙紝鍦ㄩ厤緗枃浠朵腑鐨勪笉鍚屽畾涔夊氨鍙互瀵瑰簲涓嶅悓鐨勯獙璇佹枃浠躲傞獙璇佹鏋朵篃浼氭牴鎹?/span> Action 鐨勭戶鎵跨粨鏋勫幓鏌ユ壘 Action 鐨勭埗綾婚獙璇佹枃浠訛紝濡傛灉鎵懼埌瀹冧細鍘繪墽琛岃繖涓埗綾葷殑楠岃瘉銆?/span>
3銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 瀹炵幇鎴戜滑鐨勯獙璇佹枃浠訛細 RegisterActionSupport-validation.xml
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
聽聽聽 <field name="user.username">
聽聽聽 <field-validator type="requiredstring">
聽聽聽聽聽聽聽聽聽聽聽 <message>You must enter a value for username.</message>
聽聽聽聽聽聽聽 </field-validator>
聽聽聽 </field>
聽聽聽 <field name="user.password">
聽聽聽 <field-validator type="requiredstring">
聽聽聽聽聽聽聽聽聽聽聽 <message>You must enter a value for password.</message>
聽聽聽聽聽聽聽 </field-validator>
聽聽聽聽聽聽聽 <field-validator type="fieldexpression">
聽聽聽聽聽聽聽聽聽聽聽 <param name="expression">user.password == verifyPassword</param>
聽聽聽聽聽聽聽聽聽聽聽 <message>Passwords don't match.</message>
聽聽聽聽聽聽聽 </field-validator>
聽聽聽 </field>
聽聽聽 <field name="user.email">
聽聽聽 <field-validator type="email">
聽聽聽聽聽聽聽聽聽聽聽 <message>You must enter a valid email.</message>
聽聽聽聽聽聽聽 </field-validator>
聽聽聽 </field>
聽聽聽 <field name="user.age">
聽聽聽 <field-validator type="int">
聽聽聽聽聽聽聽聽聽聽聽 <param name="min">6</param>
聽聽聽聽聽聽聽聽聽聽聽 <param name="max">100</param>
聽聽聽聽聽聽聽聽聽聽聽 <message>Age must be between ${min} and ${max}, current value is ${user.age}.</message>
聽聽聽聽聽聽 聽</field-validator>
聽聽聽 </field>
</validators>
璇存槑錛?/span>
1 錛夈?/span> <field > 鏍囩浠h〃涓涓瓧孌碉紝瀹冪殑灞炴р?/span> name 鈥濆拰欏甸潰杈撳叆妗嗙殑鈥?/span> name 鈥濆睘鎬у繀闇瀹屽叏涓鑷達紝鍏跺疄瀹冧篃灝辨槸鎴戜滑鐨勮〃杈懼紡璇█銆?/span>
2 錛夈?/span> <field-validator > 鏍囩瀹氫箟鎴戜滑鐨勯獙璇佽鍒欙紝 type 灞炴х殑鍊煎氨鏄氨鏄垜浠墠闈㈠畾涔夌殑楠岃瘉綾誨瀷銆?/span>
3 錛夈侀獙璇佹枃浠朵腑錛屽瓧孌電殑鏁版嵁鏄氳繃琛ㄨ揪寮忚璦浠庢垜浠殑鍊煎爢鏍堬紙 OgnlValueStack 錛変腑鍙栧緱錛屼竴鑸槸 Action 鎴?/span> Model 瀵硅薄銆備緥濡傦細鎴戜滑鐨勫瓧孌碘?/span> user.age 鈥濓紝瀹冧細閫氳繃 Action 鐨?/span> getUser().getAge() 鏉ュ彇寰楃敤鎴瘋緭鍏ョ殑騫撮緞錛屽啀鏉ユ牴鎹獙璇佺殑綾誨瀷鈥?/span> int 鈥濆拰鏈澶у兼渶灝忓肩殑鍙傛暟鏉ュ垽鏂緭鍏ョ殑鏁版嵁鏄惁鑳介氳繃楠岃瘉銆?/span>
4 錛夈佷笉綆¢獙璇佹槸鍚﹂氳繃錛屾垜浠殑 Action 閮戒細鎵ц錛屼絾濡傛灉楠岃瘉娌℃湁閫氳繃錛屽畠涓嶄細璋冪敤 Action 鐨?/span> execute() 鏂規硶銆?/span>
4銆?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">聽聽 鏄劇ず Action 鐨勯獙璇侀敊璇俊鎭?/span>
濡傛灉鐢ㄦ埛杈撳叆鐨勬暟鎹獙璇佹病鏈夐氳繃錛屾垜浠渶閲嶆柊榪斿洖杈撳叆欏甸潰錛屽茍緇欏嚭閿欒淇℃伅鎻愮ず銆傛嫤鎴櫒鏍堚?/span> validationWorkflowStack 鈥濅負鎴戜滑瀹炵幇浜嗚繖涓姛鑳姐傚畠棣栧厛楠岃瘉鐢ㄦ埛杈撳叆鐨勬暟鎹紝濡傛灉楠岃瘉娌℃湁閫氳繃灝嗕笉鎵ц鎴戜滑 Action 鐨?/span> execute() 鏂規硶錛岃屾槸灝嗚姹傞噸鏂拌繑鍥炲埌杈撳叆欏甸潰銆?/span>
鎴戜滑鐨?/span> xwork.xml 閰嶇疆鏂囦歡濡備笅錛?/span>
<action name="registerSupport" class="example.register.RegisterActionSupport">
聽聽聽聽聽聽聽聽聽聽聽 <result name="success" type="dispatcher">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <param name="location">/register-result.jsp</param>
聽聽聽聽聽聽聽聽聽聽聽 </result>
聽聽聽聽聽聽聽聽聽聽聽 <result name="input" type="dispatcher">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <param name="location">/registerSupport.jsp</param>
聽聽聽聽聽聽聽聽聽聽聽 </result>
聽聽聽聽聽聽聽聽聽聽聽 <interceptor-ref name="validationWorkflowStack"/>
聽聽聽聽聽聽聽 </action>
閫氳繃鎺ュ彛 ValidationAware 錛?/span> 鎴戜滑鍙互鑾峰緱綾葷駭鍒垨瀛楁綰у埆鐨勯獙璇侀敊璇俊鎭紝榪欎釜閿欒淇℃伅涔熷氨鏄垜浠獙璇佹枃浠朵腑 <message> 鏍囩閲岀殑鏁版嵁銆?/span> ActionSupport 綾誨凡瀹炵幇浜嗘鎺ュ彛錛岃繖鏍峰湪搴旂敤涓垜浠殑 Action 鍙緇ф壙 ActionSupport 綾誨氨鍙互浜嗐?/span> RegisterActionSupport .java 浠g爜濡備笅錛?/span>
package example.register;
import com.opensymphony.xwork.ActionSupport;
public class RegisterActionSupport extends ActionSupport {
聽聽聽 private User user= new User();
聽聽聽 private String verifyPassword;
聽聽聽
聽聽聽 public User getUser(){
聽聽聽聽聽聽聽 returnthis.user;
聽聽聽 }
聽聽聽
聽聽聽 public String execute(){
聽聽聽聽聽聽聽 // 鍦ㄨ繖閲岃皟鐢ㄧ敤鎴鋒敞鍐岀殑涓氬姟閫昏緫錛屾瘮濡傦細灝嗘敞鍐屼俊鎭瓨鍌ㄥ埌鏁版嵁搴?/span>
聽聽聽聽聽聽聽 return SUCCESS;
聽聽聽 }
聽聽聽 public String getVerifyPassword(){
聽聽聽聽聽聽聽 returnthis.verifyPassword;
聽聽聽 }
聽聽聽
聽聽聽 publicvoid setVerifyPassword(String verPassword){
聽聽聽聽聽聽聽 this.verifyPassword = verPassword;
聽聽聽 }
}
鎴戜滑 WebWork 鐨?/span> UI 鏍囩搴撶洿鎺ユ彁渚涗簡楠岃瘉閿欒淇℃伅鏄劇ず鍔熻兘銆傚鏋滃瓧孌電駭鍒殑楠岃瘉娌℃湁閫氳繃錛屽畠浼氬湪杈撳叆妗嗕笂鏂規樉紺洪獙璇佹枃浠跺畾涔夌殑閿欒鎻愮ず淇℃伅銆傛垜浠皢鐢ㄦ埛杈撳叆鐨勯〉闈㈡洿鏀瑰涓嬶細
registerSupport.jsp
<%@ taglib uri="webwork" prefix="ww" %>
<html>
<head><title>Register Example</title></head>
<body>
<table border=0 width=97%>
<tr><td align="left">
聽聽聽 <ww:form name="'test'" action="'/example/registerSupport.action'" method="'POST'">
聽聽聽聽聽聽聽聽聽聽聽 <ww:textfield label="'Username'" name="'user.username'" required="true"/>
聽聽聽聽聽聽聽聽聽聽聽 <ww:textfield label="'Password'" name="'user.password'" required="true"/>
聽聽聽聽聽聽聽聽聽聽聽 <ww:textfield label="'VerifyPassword'" name="'verifyPassword'" required="true"/>
聽聽聽聽聽聽聽聽聽聽 聽<ww:textfield label="'Email'" name="'user.email'" required="true"/>
聽聽聽聽聽聽聽聽聽聽聽 <ww:textfield label="'Age'" name="'user.age'" required="true"/>
聽聽聽聽聽聽聽聽聽聽聽 <ww:submit value="'Submit'"/>
聽聽聽聽聽聽聽聽 </ww:form>
</td></tr>
</table>
</body>
</html>
鎴戜滑涓婇潰鐨勪緥瀛愪嬌鐢ㄧ殑鏄湇鍔″櫒绔獙璇併?/span> WebWork 涔熶負鎴戜滑鎻愪緵浜嗘柟渚跨殑瀹㈡埛绔獙璇併傚畠灝嗛獙璇佽嚜鍔ㄧ敓鎴?/span> JavaScript 鑴氭湰銆傚鏋滆浣跨敤瀹㈡埛绔獙璇佸彧闇鏀瑰彉鐩稿簲鐨勯獙璇佺被鍨嬪氨鍙互浜嗭紙杈撳叆欏甸潰鐨勮〃鍗曞繀闇浣跨敤 <ww:form> 鏍囩錛屽茍璁劇疆灞炴р?/span> validate="true" 鈥濓級銆傚叿浣撶殑楠岃瘉綾誨瀷鍙互鍦?/span> WebWork 鐨勫寘 com.opensymphony.webwork.validators 涓壘鍒般?/span>


Binary 2006-09-01 13:40 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲精品乱码久久久久久| 亚洲国产精品无码专区影院 | 又粗又硬免费毛片| 国产特黄一级一片免费| 午夜亚洲国产理论秋霞| 最新欧洲大片免费在线| 免费无码婬片aaa直播表情| 国产亚洲精久久久久久无码77777| 97在线视频免费播放| 99亚洲男女激情在线观看| 亚洲国产精品成人精品无码区在线 | 亚洲乱妇熟女爽到高潮的片| JLZZJLZZ亚洲乱熟无码| 日本zzzzwww大片免费| 丰满妇女做a级毛片免费观看| 亚洲美女人黄网成人女| 亚洲AV无码乱码在线观看性色扶| 最近中文字幕完整版免费高清 | 看亚洲a级一级毛片| 边摸边吃奶边做爽免费视频网站| 亚洲综合无码一区二区三区| 亚洲乱码中文字幕手机在线 | 嫖丰满老熟妇AAAA片免费看| 国产一级a毛一级a看免费人娇| 亚洲中文无码亚洲人成影院| 亚洲人成网站影音先锋播放| 日批日出水久久亚洲精品tv| 无码中文字幕av免费放| 午夜爱爱免费视频| 久久永久免费人妻精品下载| 亚美影视免费在线观看| 国产av无码专区亚洲av毛片搜| 亚洲日本乱码卡2卡3卡新区| 久久亚洲精品无码| 亚洲成人免费网址| 久久久国产精品亚洲一区| 亚洲精品无码成人AAA片| 亚洲综合一区二区| 国产精品国产亚洲区艳妇糸列短篇| 免费国产黄网站在线观看动图| 免费无码一区二区三区蜜桃|