锘??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕亚洲综合久久2,亚洲午夜久久久影院伊人,亚洲男人的天堂在线va拉文http://m.tkk7.com/lijiajia418/Vicent's blogzh-cnFri, 11 Jul 2025 11:51:23 GMTFri, 11 Jul 2025 11:51:23 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[     鎽樿: 涓銆伮?tīng)妗ユ锛圔ridge錛夋ā寮? 妗ユ妯″紡鏄竴涓潪甯告湁鐢ㄧ殑妯″紡錛屼篃鏄瘮杈冨鏉傜殑涓涓ā寮忋傜啛鎮(zhèn)夎繖涓ā寮忓浜庣悊瑙i潰鍚戝璞$殑璁捐鍘熷垯錛屽寘鎷?寮錛嶉棴"鍘熷垯(OCP)浠ュ強(qiáng)緇勫悎/鑱氬悎澶嶇敤鍘熷垯(CARP)閮藉緢鏈夊府鍔┿傜悊瑙eソ榪欎袱涓師鍒欙紝鏈夊姪浜庡艦鎴愭紜殑璁捐鎬濇兂鍜屽煿鍏昏壇濂界殑璁捐椋庢牸銆? 娉細(xì)銆奐ava涓庢ā寮忋嬩竴涔﹁涓築ridge妯″紡涓嶆槸涓涓嬌鐢ㄩ鐜囧緢楂樼殑妯″紡錛屾垜涓嶅お璧炲悓錛屾垜璁や負(fù)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">鍦ㄩ」鐩殑涓氬姟灞炴т腑,浣犳槸涓嶆槸瑕佺粡甯擱獙璇佸睘鎬х殑鍙栧艱寖鍥村憿. 鎯寵浜?jiǎn)瑙f瘮杈冧紭缇庣殑瑙e喯x(chóng)柟妗堝悧?聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) </font> </p> <p align="left"> <font color="#008000">鐪嬬湅Hibernate Validator 鏄庝箞鍋氱殑鍚?涓瑙佸埌濂?鐩鎬俊浣犲氨浼?xì)璇? Oh God, 榪欏氨鏄垜闇瑕佺殑.</font> </p> <p align="left"> <span style="COLOR: red">浠諱綍鑾峰緱Matrix鎺堟潈鐨勭綉绔欙紝杞澆璇蜂繚鐣欎互涓嬩綔鑰呬俊鎭拰閾炬帴錛?/span> <br />浣滆咃細(xì)icess(浣滆呯殑blog:<a target="_new">http://blog.matrix.org.cn/page/icess</a>)<br />鍏抽敭瀛楋細(xì)Hibernate Validator</p> <p>鐢ˋnnotations 緇欑被鎴栬呯被鐨勫睘鎬у姞涓婄害鏉?constraint),鍦ㄨ繍琛屾湡媯(gè)鏌ュ睘鎬у兼槸寰堜紭闆呯殑.Hibernate Validator灝辨槸榪欐牱鐨勪竴涓鏋?璇ユ鏋舵槸鍗佸垎瀹規(guī)槗鐨?灝卞儚鍙傝冩枃妗d腑瀹gО鐨勯偅鏍?,鍑犱箮娌℃湁浠涔堝涔?fàn)鏇簿U?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">聽(tīng)</font> <font color="#3f7f5f">*聽(tīng)Created聽(tīng)on聽(tīng)2006-1-12 Person.java</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f7f5f">*聽(tīng)@author聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package聽(tīng)</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.Length;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.Min;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</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聽(tīng) //嫻嬭瘯鑷畾涔夌害鏉?/font></span> </font> </code> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <br /> <font color="#7f0055"> <b>public聽(tīng)class聽(tīng)</b> </font> <font color="#000000">Person聽(tīng){</font> <br /> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>private聽(tīng)</b> </font> <font color="#000000">String聽(tīng)name;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>private聽(tīng)int聽(tīng)</b> </font> <font color="#000000">age;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>private聽(tīng)</b> </font> <font color="#000000">Address聽(tīng)address;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)</b> </font> <font color="#000000">Person()聽(tīng){}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#ff0000">@Valid //娉ㄦ剰姝ゅ</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)</b> </font> <font color="#000000">Address聽(tīng)getAddress()聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>return聽(tīng)</b> </font> <font color="#000000">address;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)void聽(tīng)</b> </font> <font color="#000000">setAddress(Address聽(tīng)address)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.address聽(tīng)=聽(tīng)address;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">@Min(value聽(tīng)=聽(tīng)</font> <font color="#990000">1</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)int聽(tīng)</b> </font> <font color="#000000">getAge()聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>return聽(tīng)</b> </font> <font color="#000000">age;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)void聽(tīng)</b> </font> <font color="#000000">setAge(</font> <font color="#7f0055"> <b>int聽(tīng)</b> </font> <font color="#000000">age)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.age聽(tīng)=聽(tīng)age;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">@Length(min聽(tīng)=聽(tīng)</font> <font color="#990000">4</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)</b> </font> <font color="#000000">String聽(tīng)getName()聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>return聽(tīng)</b> </font> <font color="#000000">name;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)void聽(tīng)</b> </font> <font color="#000000">setName(String聽(tīng)name)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.name聽(tīng)=聽(tīng)name;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</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">聽(tīng)</font> <font color="#3f7f5f">*聽(tīng)Created聽(tīng)on聽(tīng)2006-1-12 Address.java</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f7f5f">*聽(tīng)@author聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package聽(tīng)</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.Length;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.Max;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.Min;</font> <br /> <br /> <font color="#7f0055"> <b>public聽(tīng)class聽(tīng)</b> </font> <font color="#000000">Address聽(tīng){</font> <br /> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>private聽(tīng)</b> </font> <font color="#000000">String聽(tīng)street;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>private聽(tīng)int聽(tīng)</b> </font> <font color="#000000">num;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)</b> </font> <font color="#000000">Address()聽(tīng){}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">@Min(value聽(tīng)=聽(tīng)</font> <font color="#990000">1</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">@Max(value聽(tīng)=聽(tīng)</font> <font color="#990000">100</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)int聽(tīng)</b> </font> <font color="#000000">getNum()聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>return聽(tīng)</b> </font> <font color="#000000">num;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)void聽(tīng)</b> </font> <font color="#000000">setNum(</font> <font color="#7f0055"> <b>int聽(tīng)</b> </font> <font color="#000000">num)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.num聽(tīng)=聽(tīng)num;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">@Length(min聽(tīng)=聽(tīng)</font> <font color="#990000">3</font> <font color="#000000">,max聽(tīng)=聽(tīng)</font> <font color="#990000">8</font> <font color="#000000">)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)</b> </font> <font color="#000000">String聽(tīng)getStreet()聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>return聽(tīng)</b> </font> <font color="#000000">street;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)void聽(tīng)</b> </font> <font color="#000000">setStreet(String聽(tīng)street)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>this</b> </font> <font color="#000000">.street聽(tīng)=聽(tīng)street;</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#000000">}</font> </code> </p> <div id="6euwkyk" class="java" align="left"> <p>涓婇潰鏄袱涓敤 Validator Annotations 娉ㄩ噴鐨?綾? 姣忎釜灞炴ч兘鐢?綰︽潫闄愬埗浜?聽(tīng) 涓嬮潰鐪嬬湅嫻嬭瘯鐨勭被鍚?</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">聽(tīng)</font> <font color="#3f7f5f">*聽(tīng)Created聽(tīng)on聽(tīng)2006-1-12</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f7f5f">*聽(tīng)@author聽(tīng)icerain</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f7f5f">*/</font> <br /> <font color="#7f0055"> <b>package聽(tīng)</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.ClassValidator;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.InvalidValue;</font> <br /> <br /> <br /> <font color="#7f0055"> <b>public聽(tīng)class聽(tīng)</b> </font> <font color="#000000">TestValidator聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)void聽(tīng)</b> </font> <font color="#000000">test()聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">Address聽(tīng)add聽(tīng)=聽(tīng)</font> <font color="#7f0055"> <b>new聽(tīng)</b> </font> <font color="#000000">Address();</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">add.setNum(</font> <font color="#990000">0</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">add.setStreet(</font> <font color="#2a00ff">"1"</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">Person聽(tīng)p聽(tīng)=聽(tīng)</font> <font color="#7f0055"> <b>new聽(tīng)</b> </font> <font color="#000000">Person();</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">p.setAddress(add);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">p.setAge(</font> <font color="#990000">0</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">p.setName(</font> <font color="#2a00ff">"ice"</font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#3f5fbf">/******************Test聽(tīng)validator聽(tīng)********/</font> </code> </p> <p align="left"> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">聽(tīng)聽(tīng)聽(tīng) </font> <font color="#ff0000">// 娉ㄦ剰璇ュ鍙獙璇佷簡(jiǎn)Person 涓轟簡(jiǎn)璇存槑 @Valid 娉ㄩ噴鐨勪嬌鐢?/font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">ClassValidator<Person>聽(tīng)classValidator聽(tīng)=聽(tīng)</font> <font color="#7f0055"> <b>new聽(tīng)</b> </font> <font color="#000000">ClassValidator<Person>聽(tīng)(Person.</font> <font color="#7f0055"> <b>class</b> </font> <font color="#000000">);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">InvalidValue[]聽(tīng)validMessages聽(tīng)=聽(tīng)classValidator.getInvalidValues(p);</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>for聽(tīng)</b> </font> <font color="#000000">(InvalidValue聽(tīng)value聽(tīng):聽(tīng)validMessages)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"InvalidValue聽(tīng)鐨勯暱搴︽槸:"聽(tīng)</font> <font color="#000000">+聽(tīng)validMessages.length</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">+</font> <font color="#2a00ff">"聽(tīng).聽(tīng)楠岃瘉娑堟伅鏄?聽(tīng)"聽(tīng)</font> <font color="#000000">+聽(tīng)value.getMessage()聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">+聽(tīng)</font> <font color="#2a00ff">"聽(tīng).聽(tīng)PropertyPath聽(tīng)鏄?"聽(tīng)</font> <font color="#000000">+聽(tīng)value.getPropertyPath()</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">+</font> <font color="#2a00ff">"聽(tīng).\n\t聽(tīng)PropertyName聽(tīng)鏄?聽(tīng)"聽(tīng)</font> <font color="#000000">+value.getPropertyName()</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">+聽(tīng)</font> <font color="#2a00ff">"Value聽(tīng)鏄?聽(tīng)"聽(tīng)</font> <font color="#000000">+聽(tīng)value.getValue()</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">+</font> <font color="#2a00ff">"聽(tīng)Bean聽(tīng)鏄?聽(tīng)"</font> <font color="#000000">+聽(tīng)value.getBean()</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">+</font> <font color="#2a00ff">"\n\t聽(tīng)BeanClass聽(tīng)鏄?"聽(tīng)</font> <font color="#000000">+聽(tīng)value.getBeanClass());</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">}</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)static聽(tīng)void聽(tīng)</b> </font> <font color="#000000">main(String[]聽(tīng)args)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>new聽(tīng)</b> </font> <font color="#000000">TestValidator().test();</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</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">鍙互鐪嬪嚭涓嶆弧瓚崇害鏉熺殑鍊奸兘琚寚鍑轟簡(jiǎn).</p><p align="left">鍚屾椂璇ュ彞: <code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#000000">ClassValidator<Person>聽(tīng)classValidator聽(tīng)=聽(tīng)</font><font color="#7f0055"><b>new聽(tīng)</b></font><font color="#000000">ClassValidator<Person>聽(tīng)(Person.</font><font color="#7f0055"><b>class</b></font><font color="#000000">);</font></code></p><p align="left">鎴戜滑鍙獙璇佷簡(jiǎn) Person. 鍦≒erson閲岄潰鐨凙ddress鐨勫睘鎬?鐢變簬鏈?code style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New',Courier"><font color="#ff0000">@Valid Annotations </font>鎵浠?Address鐨勭浉鍏沖睘鎬т篃琚満鑱旈獙璇佷簡(jiǎn) .</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")鏂規(guī)硶鏃?鍔犱笂浣犺楠岃瘉鐨勫睘鎬у氨鍙互浜?濡傛垜浠彧鎯抽獙璇乤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">濡傛灉浣犺鍐欒嚜宸辯殑綰︽潫鍛?, 浣犱笉鐢ㄦ媴蹇?,榪欎篃鏄緢瀹規(guī)槗鐨? </span> </code>浠諱綍綰︽潫鏈変袱閮ㄥ垎緇勬垚: [綰︽潫鎻忚堪絎?鍗蟲(chóng)敞閲奭the constraint <span id="y4gwo6q" class="emphasis"><em>descriptor</em></span> (the annotation) 鍜孾綰︽潫validator 鍗?瀹炵幇綾籡 the constraint <span id="mwk6cma" 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="8k46uyg" 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聽(tīng)</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.Documented;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)static聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.ElementType.TYPE;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)static聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.ElementType.FIELD;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)static聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.ElementType.METHOD;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.Retention;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)static聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.RetentionPolicy.RUNTIME;</font> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">java.lang.annotation.Target;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.ValidatorClass;</font> <br /> <br /> <font color="#3f5fbf">/**</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*聽(tīng)Dummy聽(tīng)sample聽(tīng)of聽(tīng)a聽(tīng)bean-level聽(tīng)validation聽(tīng)annotation</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*聽(tīng)</font> <font color="#7f9fbf">@author聽(tīng)</font> <font color="#3f5fbf">Emmanuel聽(tīng)Bernard</font> <br /> <font color="#ffffff">聽(tīng)</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聽(tīng)</b> </font> <font color="#000000">@interface聽(tīng)Serializability聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>int聽(tīng)</b> </font> <font color="#000000">num()聽(tīng)</font> <font color="#7f0055"> <b>default聽(tīng)</b> </font> <font color="#990000">11</font> <font color="#000000">; </font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">String聽(tīng)message()聽(tīng)</font> <font color="#7f0055"> <b>default聽(tīng)</b> </font> <font color="#2a00ff">"bean聽(tīng)must聽(tīng)be聽(tīng)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="o6myq2e" 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聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) </font> </code> </font> </p> <p align="left"> <code style="FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">榪欏嚑涓垜灝變笉鐢ㄨВ閲婁簡(jiǎn)鍚?</font> </code> </p> <p align="left"> <code style="FONT-FAMILY: 'Courier New',Courier"> <font color="#000000">Serializability聽(tīng)閲岄潰澹版槑浜?jiǎn)涓涓?message 鏄劇ず綰︽潫鐨勬彁紺轟俊鎭? num 鍙槸涓轟簡(jiǎn)璇存槑涓涓柟闈?鍦ㄨ繖閲岄潰娌℃湁瀹為檯鐢ㄩ旂敤 .</font> </code> </p> <p align="left"> <code> <span style="FONT-FAMILY: 'Courier New',Courier">鐒跺悗灝辨槸 瀹炵幇涓涓?/span> </code>constraint <em><span id="yooo6ky" class="emphasis">validator 綾?璇ョ被瑕佸疄鐜?/span></em><tt class="literal">Validator<ConstraintAnnotation></tt><em><span id="m4wcwce" 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:聽(tīng)SerializabilityValidator.java,v聽(tīng)1.3聽(tīng)2005/11/17聽(tīng)18:12:11聽(tīng)epbernard聽(tīng)Exp聽(tīng)$</font> <br /> <font color="#7f0055"> <b>package聽(tīng)</b> </font> <font color="#000000">test.annotation.validator;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">java.io.Serializable;</font> <br /> <br /> <font color="#7f0055"> <b>import聽(tīng)</b> </font> <font color="#000000">org.hibernate.validator.Validator;</font> <br /> <br /> <font color="#3f5fbf">/**</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*聽(tīng)Sample聽(tīng)of聽(tīng)a聽(tīng)bean-level聽(tīng)validator</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*聽(tīng)</font> <font color="#7f9fbf">@author聽(tīng)</font> <font color="#3f5fbf">Emmanuel聽(tīng)Bernard</font> <br /> <font color="#ffffff">聽(tīng)</font> <font color="#3f5fbf">*/</font> <br /> <font color="#7f0055"> <b>public聽(tīng)class聽(tīng)</b> </font> <font color="#000000">SerializabilityValidator聽(tīng)</font> <font color="#7f0055"> <b>implements聽(tīng)</b> </font> <font color="#000000">Validator<Serializability>,聽(tīng)Serializable聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>public聽(tīng)boolean聽(tīng)</b> </font> <font color="#000000">isValid(Object聽(tīng)value)聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)</font> <font color="#00ff00">//榪欓噷鍙槸Validator 閲岄潰鐨?瀹炵幇楠岃瘉瑙勫垯鐨?鏂規(guī)硶. value 鏄楠岃瘉鐨勫?</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"IN聽(tīng)SerializabilityValidator聽(tīng)isValid:"</font> <font color="#000000">+value.getClass()+</font> <font color="#2a00ff">":聽(tīng)"聽(tīng)</font> <font color="#000000">+value.toString()); </font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>return聽(tīng)</b> </font>value<font color="#3f7f5f">聽(tīng)</font><font color="#800080">instanceof</font><font color="#3f7f5f">聽(tīng)</font>Serializable<font color="#3f7f5f">;</font><br /><font color="#ffffff">聽(tīng)聽(tīng)</font><font color="#000000">}</font><br /><br /><font color="#ffffff">聽(tīng)聽(tīng)</font><font color="#7f0055"><b>public聽(tīng)void聽(tīng)</b></font><font color="#000000">initialize(Serializability聽(tīng)parameters)聽(tīng){</font><br /><font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font><font color="#3f7f5f">//聽(tīng)鍦ㄨ繖閲屽彲浠?鍙栧緱 </font></code> <font size="2">constraint <em><span id="88y46gc" class="emphasis">descriptor 閲岄潰鐨勫睘鎬?濡備笂闈㈡垜浠0鏄庣殑 num </span></em></font> <code style="FONT-SIZE: 10pt; MARGIN: 0px; FONT-FAMILY: 'Courier New',Courier"> <br /> <font color="#ffffff">聽(tīng)聽(tīng)聽(tīng)聽(tīng)</font> <font color="#000000">System.out.println(</font> <font color="#2a00ff">"IN聽(tīng)SerializabilityValidator:聽(tīng)parameters:"</font> <font color="#000000">+聽(tīng)parameters.num()聽(tīng));</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</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聽(tīng) 灝卞彲浠ョ害鏉熶竴涓被瀹炵幇</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聽(tīng) 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聽(tīng) 涓殑message 鏀逛負(fù)浠}鎵╀綇鐨?灞炴ф枃浠剁殑Key灝卞彲浠ヤ簡(jiǎn) </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聽(tīng)</b> </font> <font color="#000000">@interface聽(tīng)Serializability聽(tīng){</font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#7f0055"> <b>int聽(tīng)</b> </font> <font color="#000000">num()聽(tīng)</font> <font color="#7f0055"> <b>default聽(tīng)</b> </font> <font color="#990000">11</font> <font color="#000000">; </font> <br /> <font color="#ffffff">聽(tīng)聽(tīng)</font> <font color="#000000">String聽(tīng)message()聽(tīng)</font> <font color="#7f0055"> <b>default聽(tīng)</b> </font> <font color="#2a00ff">"{Serializable}"; </font> <font color="#008000">//"bean聽(tīng)must聽(tīng)be聽(tīng)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 鍖呴噷闈㈢殑璧勬簮鏂囦歡鍩虹涓婁慨鏀?,鍦ㄦ墦鍖呴噷闈?榪欐牱灝卞彲浠ヤ簡(jiǎn). 鑷繁鎵撳寘鍙兘涓嶅お鏂逛究.浣犲彲浠ユ妸璇ュ寘閲岄潰鐨勬枃浠跺鍒跺嚭鏉?鐒跺悗鏀懼埌浣犺嚜宸辯殑欏圭洰鍖呬笅鍦ㄨ嚜宸辯紪杈? 璇ユ祴璇曚腑 鎴戞槸鏀懼湪 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聽(tīng) //鍔犱笂鑷繁瀹氫箟鐨勫浗闄呭寲娑堟伅. </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">榪欐牱灝卞彲浠ヤ簡(jiǎn) .聽(tīng) 褰撶劧 浣犺繕鍙互 鏇存敼 Hibernate Validator 鐨勬秷鎭?涓嶆槸鍦ㄤ笂闈㈢殑璧勬簮鏂囦歡涓洿鎺ヤ慨鏀?/font> </code> <font size="2">validator.length = ... 絳夌瓑 </font> <code> <font face="Courier New, Courier" size="2">) , 榪樿寰?Validator 娉ㄩ噴涓湁涓?message 鍏冪礌鍚? 浣犱互鍓嶇敤鐨勯兘鏄粯璁ゅ?鐜板湪浣犲彲浠ヨ涓轟綘鑷繁瀹氫箟鐨勪簡(jiǎn).</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">鍐嶄竴嬈¤繍琛屾祴璇?,鎴戜滑灝卞彲浠ョ湅鍒頒笂闈袱鏉¤嚜瀹氫箟緇戝畾鐨勬秷鎭簡(jiǎn) .濡備笅:</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">鐪嬪埌榪欓噷鍏跺疄涓嶇敤鎴戝湪澶氳浜?澶у閮界煡閬撴庝箞鐢?浠涔堟椂鍊欑敤. 浣滀負(fù)涓綃囦粙緇嶆ф枃绔犳垜榪樻槸鍦ㄦ緇欏嚭涓涓渶甯哥敤鐨勪緥瀛愬惂,鏇村ソ鐨勪嬌鐢ㄦ柟寮忓ぇ瀹舵參鎱㈡寲鎺樺惂.</p> <p align="left">姣斿 : 浣犵幇鍦ㄥ湪寮鍙戜竴涓漢鍔涜祫婧?HR)緋葷粺 (鍏跺疄鏄垜浠珽RP璇劇▼鐨勪竴涓綔涓?^_^), 閲岄潰瑕佸鐞嗗ぇ閲忕殑鏁版嵁,灝ゅ叾鏄湪杈撳叆鍚勭璧勬枡鏃?濡?鐧昏鍛樺伐淇℃伅. 濡傛灉浣犲叕鍙哥殑鍛樺伐鐨勫勾榫勮姹傛槸18 -- 60 閭d箞浣犳墍杈撳叆鐨勫勾榫勫氨涓嶈兘瓚呭嚭榪欎釜鑼冨洿. 浣犲彲鑳戒細(xì)璇磋繖寰堝鏄撳晩 , 涓嶇敤Validator灝卞彲浠ヨВ鍐沖晩.榪欎繚鎸佹暟鎹墠楠岃瘉灝卞彲浠ュ暒 濡俰f ( e.getAge() > 60 || e.getAge() < 18 ) ........ 緇欏嚭閿欒淇℃伅 鐒跺悗鎻愮ず閲嶆柊杈撳叆涓嶅氨O(jiān)K鍟?鐢ㄥ緱鐫 鍏村笀鍔ㄤ紬鐨勬潵涓涓夋柟妗嗘灦鍚? </p> <p align="left">鏄晩 褰撳氨楠岃瘉榪欎竴涓睘鎬ф椂, 娌℃湁蹇呰鍟?! 浣嗘槸涓涓湡姝g殑HR 緋葷粺,浼?xì)鍙湁涓涓睘鎬ц楠岃瘉鍚? 鎭愭曡鏈塏澶氬惂</p> <p align="left">浣犺鏄瘡涓涓兘閭f牱 鍐欎竴孌甸獙璇佷唬鐮?鏄笉鏄緢鐑?chǔ)鍟?,鍐典笖涔熶笉鏂逛究浠g爜閲嶇敤. 鐜板湪鑰冭檻涓浜?Validator 鏄笉鏄洿楂樻晥鍟?鎷︽埅鍒?綰︽潫榪濅緥鐨?灞炴?灝卞彲浠ョ洿鎺ュ緱鍒?鍥介檯鍖栫殑娑堟伅 鍙互鎶婅娑堟伅鏄劇ず鍒頒竴涓脊鍑哄璇濇涓?鎻愮ず鏇存聽(tīng) !</p> <p align="left">Validator鐨勭敤澶勪笉鍙繖涓縐?,浣犲彲浠ユ兂鍒板浣曠敤鍛?! 嬈㈣繋鍙戣〃浣犵殑楂樿!!</p> <p align="left">OK 鍒版 鎴戜滑鐨?Hibernate Validator 涔嬫梾灝辮鍏堝憡涓孌佃惤浜?. 甯屾湜榪欐槸浠や綘蹇?jī)鏃芳湠鎬$殑涓嬈″瘨鍐箣鏃?</p> <p align="left">鎶婁綘瀛﹀埌鐨勫簲鐢ㄥ埌浣犵殑欏圭洰涓惂,涓瀹氫細(xì)鎻愰珮?shù)綘鐨勭敓漶旂巼鐨? 鐩鎬俊鎴?,娌¢敊鐨劼?^_^ !</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>
浣滆咃細(xì)icess(浣滆呯殑blog:http://blog.matrix.org.cn/page/icess)
鍏抽敭瀛楋細(xì)Hibernate Validator

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 緙栬瘧鏈熸牎楠屻傞敊璇殑鎵規(guī)敞鍦ㄧ紪璇戞湡闂村氨浼?xì)鎶ラ敊銆?

  • 鍏冩暟鎹壒娉ㄥ湪java浠g爜涓紝閬垮厤浜?jiǎn)棰濆鐨勬枃錃g緇存姢宸ヤ綔

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

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

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

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

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

棣栧厛鍦?Hibernate.cfg.xml 鏂囦歡涓幓鎺変簡(jiǎn)

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

榪欎竴琛? 鍥犱負(fù)鍦ㄥ墠闈㈢殑瀹為獙涓互鍙?qiáng)寰忕珛浜?jiǎn)鏁版嵁搴撹〃浜?涓嶅啀闇瑕佹洿鏂頒簡(jiǎn).濡傛灉浣犳槸絎竴嬈¤繍琛岃渚嬪瓙 榪樻槸瑕佽琛岀殑.

Test.java 濡備笅:

/*
聽(tīng)*聽(tīng)Created聽(tīng)on聽(tīng)2005
聽(tīng)*聽(tīng)@author聽(tīng)
聽(tīng)*/
package聽(tīng)test.hibernate.annotation;

import聽(tīng)org.hibernate.Session;
import聽(tīng)org.hibernate.Transaction;

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

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

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

package聽(tīng)test.hibernate.annotation;

import聽(tīng)java.util.LinkedList;
import聽(tīng)java.util.List;

import聽(tīng)javax.persistence.AccessType;
import聽(tīng)javax.persistence.Basic;
import聽(tīng)javax.persistence.Entity;
import聽(tīng)javax.persistence.GeneratorType;
import聽(tīng)javax.persistence.Id;
import聽(tīng)javax.persistence.Table;
import聽(tīng)javax.persistence.Transient;

/**
聽(tīng)*聽(tīng)Person聽(tīng)generated聽(tīng)by聽(tīng)hbm2java
聽(tīng)*/

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

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

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

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

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

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

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

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

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

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

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

}

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

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

嫻嬭瘯鏈哄櫒閰嶇疆:

CPU:聽(tīng) AMD Athlon (xp) 2000+

鍐呭瓨: 784880KB

紜洏: 涓夋槦 SP0812N

璇誨彇涓嬈÷?tīng)聽(tīng)鐨勬瘮杈?(鍗曚綅: 姣)

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

聽(tīng)聽(tīng) 璇誨彇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鏂囦歡鎬諱綋涓婃參浜?jiǎn)涓鐐?/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鏂囦歡鎬諱綋涓婃參浜?jiǎn)涓鐐?/td>

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

鎬葷粨: 緇忚繃 xml 鏂囦歡 鍜孉nnotations 鐨勪紭緙虹偣鍜?鎬ц兘涓婄殑瀵規(guī)瘮.鐜板湪浣跨敤閭d釜浣滀負(fù)浣犳寔涔呭寲鏄犲皠絳栫暐.鎴戠浉淇″ぇ瀹墮兘浼?xì)姝<嫯閫夋嫨鐨?

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



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鐨勮В鍐蟲(chóng)柟妗堬紝鍏跺簳灞傚鏁版嵁搴撶殑鎿嶄綔渚濊禆浜嶫DBC錛屾墍浠ユ?zhèn)ㄥ繀椤诲厛鍙栧緱JDBC椹卞姩紼嬪簭錛屽湪榪欒竟鎵浣跨敤鐨勬槸MySQL錛屾墍浠ユ?zhèn)ㄥ繀椤昏?MySQL廬 Connector/J 鍙栧緱MySQL鐨凧DBC椹卞姩紼嬪簭銆?

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

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

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

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

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

Hibernate鍙互榪愯浜庡崟鏈轟箣涓婏紝涔熷彲浠ヨ繍琛屼簬Web搴旂敤紼嬪簭涔嬩腑錛屽鏋滄槸榪愯浜庡崟鏈猴紝鍒欏皢鎵鏈夌敤鍒扮殑jar妗f錛堝寘鎷琂DBC椹卞姩紼嬪簭錛夎瀹氳嚦CLASSPATH涓紝濡傛灉鏄繍琛屼簬Web搴旂敤紼嬪簭涓紝鍒欏皢jar妗f緗斁浜嶹EB-INF/lib涓?br />
濡傛灉鎮(zhèn)ㄨ繕闇瑕侀澶栫殑Library錛屽啀渚濋渶姹傚姞鍏ワ紝渚嬪JUnit銆丳roxool絳夌瓑錛屾帴涓嬫潵鍙互灝唀tc鐩綍涓嬬殑 log4j.properties澶嶅埗鑷矵ibernate欏圭洰鐨凜lasspath涓嬶紝騫朵慨鏀逛竴涓嬪綋涓殑 log4j.logger.org.hibernate涓篹rror錛屼篃灝辨槸鍙湪鍦ㄩ敊璇彂鐢熸椂鏄劇ず蹇呰鐨勮鎭?br />
鎺ョ潃璁劇疆鍩烘湰鐨凥ibernate閰嶇疆鏂囦歡錛屽彲浠ヤ嬌鐢╔ML鎴朠roperties妗f錛岃繖杈瑰厛浣跨敤XML錛屾。鍚嶉璁句負(fù)hibernate.cfg.xml錛?br />
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
聽(tīng) "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
聽(tīng) "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
聽(tīng)
<hibernate-configuration>
聽(tīng)聽(tīng)聽(tīng) <session-factory>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 鏄劇ず瀹為檯鎿嶄綔鏁版嵁搴撴椂鐨凷QL -->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <property name="show_sql">true</property>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- SQL鏂硅█錛岃繖杈硅瀹氱殑鏄疢ySQL -->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- JDBC椹卞姩紼嬪簭 -->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- JDBC URL -->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <property name="connection.url">jdbc:mysql://localhost/demo</property>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 鏁版嵁搴撲嬌鐢ㄨ?-->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <property name="connection.username">root</property>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 鏁版嵁搴撳瘑鐮?-->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <property name="connection.password">123456</property>
聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <!-- 浠ヤ笅璁劇疆瀵硅薄涓庢暟鎹簱琛ㄦ牸鏄犲儚綾誨埆 -->
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) <mapping class="onlyfun.caterpillar.User"/>
聽(tīng)聽(tīng)聽(tīng) </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
);
瀵逛簬榪欎釜琛ㄦ牸錛屾?zhèn)ㄦ湁涓涓猆ser綾誨埆涓庝箣瀵瑰簲錛岃〃鏍間腑鐨勬瘡涓涓瓧孌靛皢瀵瑰簲鑷砋ser瀹炰緥涓婄殑Field鎴愬憳銆?br />
package onlyfun.caterpillar;
聽(tīng)
import javax.persistence.*;
聽(tīng)
@Entity
@Table(name="user") // 闈炲繀瑕侊紝鍦ㄨ〃鏍煎悕縐頒笌綾誨埆鍚嶇О涓嶅悓鏃朵嬌鐢?/span>
public class User {
聽(tīng) @Id
聽(tīng) @GeneratedValue(strategy=GenerationType.AUTO)
聽(tīng)聽(tīng)聽(tīng) private Integer id;
聽(tīng)
聽(tīng) @Column(name="name") // 闈炲繀瑕侊紝鍦ㄥ瓧孌靛悕縐頒笌灞炴у悕縐頒笉鍚屾椂浣跨敤
聽(tīng)聽(tīng)聽(tīng) private String name;
聽(tīng)
聽(tīng) @Column(name="age")
聽(tīng)聽(tīng)聽(tīng) private Integer age; // 闈炲繀瑕侊紝鍦ㄥ瓧孌靛悕縐頒笌灞炴у悕縐頒笉鍚屾椂浣跨敤
聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) // 蹇呴』瑕佹湁涓涓璁劇殑寤烘瀯鏂規(guī)硶
聽(tīng)聽(tīng)聽(tīng) // 浠ヤ嬌寰桯ibernate鍙互浣跨敤Constructor.newInstance()寤虹珛瀵硅薄
聽(tīng)聽(tīng)聽(tīng) public User() {
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public Integer getId() {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) return id;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public void setId(Integer id) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) this.id = id;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public String getName() {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) return name;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public void setName(String name) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) this.name = name;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public Integer getAge() {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) return age;
聽(tīng)聽(tīng)聽(tīng) }
聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public void setAge(Integer age) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) this.age = age;
聽(tīng)聽(tīng)聽(tīng) }
}

鍏朵腑id鏄釜鐗規(guī)畩鐨勫睘鎬э紝Hibernate浼?xì)鋴社敤瀹冩潵浣滀皋Z富閿瘑鍒紝鎮(zhèn)ㄥ彲浠ュ畾涔変富閿駭鐢熺殑鏂瑰紡錛岃繖杈硅瀹氫負(fù)鑷姩浜х敓涓婚敭錛屽彲浠ョ湅鍒幫紝瀹炰綋鏍囪瘑錛屼富閿敓鎴愶紝浠ュ強(qiáng)鐩稿叧鏄犲儚錛岄兘鍙互浣跨敤Annotation鏉ュ畬鎴愩?

鎺ヤ笅鏉ユ挵鍐欎竴涓祴璇曠殑紼嬪簭錛岃繖涓▼搴忕洿鎺ヤ互Java紼嬪簭璁捐浜哄憳鐔熸?zhèn)夌殑璇硶鏂瑰紡鏉ユ搷浣滃璞″Q岃屽疄闄呬笂涔熺洿鎺ュ畬鎴愬鏁版嵁搴撶殑鎿嶄綔錛岀▼搴忓皢浼?xì)灏嗕竴絎旀暟鎹瓨鍏ヨ〃鏍間箣涓細(xì)
package onlyfun.caterpillar;
聽(tīng)
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
聽(tīng)
public class HibernateAnnotationDemo {
聽(tīng)
聽(tīng)聽(tīng)聽(tīng) public static void main(String[] args) {
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // 闇瑕丄nnotationConfiguration璇誨彇Annotation璁伅
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) Configuration config = new AnnotationConfiguration().configure();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // 鏍規(guī)嵁 config 寤虹珛 SessionFactory
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // SessionFactory 灝嗙敤浜庡緩绔?Session
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) SessionFactory sessionFactory = config.buildSessionFactory();
聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // 灝嗘寔涔呭寲鐨勭墿浠?/span>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) User user = new User();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) user.setName("caterpillar");
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) user.setAge(new Integer(30));聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // 寮鍚疭ession錛岀浉褰撲簬寮鍚疛DBC鐨凜onnection
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) Session session = sessionFactory.openSession();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // Transaction琛ㄧず涓緇勪細(xì)璇濇搷浣?/span>
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) Transaction tx= session.beginTransaction();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) // 灝嗗璞℃槧鍍忚嚦鏁版嵁搴撹〃鏍間腑鍌ㄥ瓨
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) session.save(user);
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) tx.commit();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) session.close();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) sessionFactory.close();
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)
聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) System.out.println("鏂板璧勬枡OK!璇峰厛鐢∕ySQL瑙傜湅緇撴灉錛?);
聽(tīng)聽(tīng)聽(tīng) }
}

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

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


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

鎵ц緇撴灉涓樉紺轟簡(jiǎn)Hibernate鎵瀹為檯浣跨敤鐨凷QL錛岀敱浜庤繖涓▼搴忚繕娌℃湁鏌ヨ鍔熻兘錛屾墍浠ヨ榪涘叆MySQL涓湅鐪嬫柊澧炵殑鏁版嵁錛屽涓嬶細(xì)
mysql> select * from user;
+----+-----------------+------+
| id聽(tīng)聽(tīng)聽(tīng) | name聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng)聽(tīng) | age聽(tīng) |
+----+-----------------+------+
|聽(tīng) 1聽(tīng)聽(tīng)聽(tīng) | caterpillar聽(tīng) | 30聽(tīng)聽(tīng) |
+----+-----------------+------+
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渚嬪瓙瀛︿範(fàn)(浜?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鍔熻兘瀹炵幇鍒嗘瀽

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

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

b) filter鍏冪礌銆?br />榪欓噷瀹氫箟浜?jiǎn)acegi鐨勪竴涓繃婊ゅ櫒銆侫cegi鐨勫ぇ閮ㄥ垎榪囨護(hù)鍣ㄩ兘鏄繖鏍烽厤緗殑銆備嬌鐢‵ilterToBeanProxy緇勪歡錛岀粰瀹冧紶閫掍竴涓猼argetClass灞炴с傝繖涓猼argetClass蹇呴』瀹炵幇javax.servlet.Filter鎺ュ彛銆?br />榪欓噷閰嶇疆鐨勬槸FilterChainProxy銆傝繖涓狥ilterChainProxy姣旇緝濂界敤錛屽彲浠ヤ負(fù)瀹冨畾涔変竴涓瞗ilter灞炴с傝繖浜沠ilter灝嗕細(xì)鎸夌収瀹氫箟鐨勯『搴忚璋冪敤銆備緥濡傦紝
<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>
榪欎釜榪囨護(hù)鍣ㄧ殑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銆傝繖閲岄噰鐢ㄤ簡(jiǎn)spring鐨凪VC妗嗘灦錛?鎵浠ヨ繖涓猻ervlet鏄痵pring MVC鐨勪竴涓牳蹇?jī)鎺у埗鍣ㄥQ坥rg.springframework.web.servlet.DispatcherServlet錛夈傝繖涓猻ervlet 鍚姩鏃跺欙紝浼?xì)浠巆ontacts-servlet.xml閲岄潰璇誨彇淇℃伅錛屽茍鍋氱浉鍏崇殑鍒濆鍖栥?br />v. remoting銆備篃鏄痵pring MVC鐨勪竴涓牳蹇?jī)鎺у埗鍣ㄣ備笌contacts涓嶅悓錛岃繖涓猻ervlet涓昏鏄彁渚泈eb services鏈嶅姟銆傝繖涓猻ervlet鍚姩鏃跺欙紝 浼?xì)浠巖emoting-servlet.xml閲岄潰璇誨彇淇℃伅錛屽茍鍋氱浉鍏崇殑鍒濆鍖栥?br />e) taglib鍏冪礌銆傝繖閲屽畾涔変簡(jiǎn)spring鐨勬爣f) 絳懼簱銆?br />3. 瑙f瀽applicationContext-acegi-security.xml銆?br />a) 榪囨護(hù)鍣ㄩ摼銆傚畾涔変簡(jiǎn)涓涓狥ilterChainProxy錛宐) 騫舵寚c) 瀹氫簡(jiǎn)涓緋誨垪鐨勮繃婊ゅ櫒閾俱俬ttpSessionContextIntegrationFilter, authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
d) 璁よ瘉綆$悊鍣ㄣ傝繖涓鐞嗗櫒鐢盿cegi鎻愪緵銆傝繖涓鐞嗗櫒闇瑕佷竴涓猵roviders鍙傛暟銆傝繖涓猵roviders鍙傛暟鍖呭惈浜?jiǎn)鎻愪緵绯痪l熻璇佺殑瀵硅薄銆?br />i. daoAuthenticationProvider銆備竴鑸敤鎴瘋璇併?br />ii. anonymousAuthenticationProvider銆傚尶鍚嶇敤鎴瘋璇併?br />iv. rememberMeAuthenticationProvider銆傝浣忔垜璁よ瘉銆?/p>

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

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

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

Binary 2006-09-01 13:45 鍙戣〃璇勮
]]>
acegi-security-sample-contacts-filter渚嬪瓙瀛︿範(fàn)(涓)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 Acegi Acegi acegi http://prdownloads.sourceforge.net/acegisecurity/acegi-security-0.8.3.zip?download銆?/span>

Acegi瀹夊叏鎺у埗鑳藉姏:

  • Role-based security 鈥曗曟瘡涓矗浠諱漢閮芥槸鏌愪釜瑙掕壊鐨勪竴鍛樸傝岃鑹茶鐢ㄦ潵闄愬埗瀵規(guī)煇浜涘畨鍏ㄥ璞$殑璁塊棶銆?/span>
  • Domain object instance security 鈥曗曞悎鍚岋紝榪欎釜緋葷粺閲岀殑涓昏鍩熷璞★紝鎷ユ湁涓涓闂帶鍒跺垪琛紙 ACL
  • Method invocation security 榪欎釜 ContactManager 鍖呭惈涓浜涘彈淇濇姢鐨勫拰鍏紑鐨勬柟娉曘?/span>
  • Web request security Web 鈥曗曡繖涓?/span> /secure URI Acegi ROLE_USER .
  • Security unaware application objects 鈥曗曞彈淇濇姢鐨勫璞′笌 Acegi Acegi *
  • Security taglib usage 鈥曗曟墍鏈夌殑 JSP Acegi *
  • Fully declarative security( ) application context Acegi *
  • Database-sourced security data 鈥曗曟墍鏈夌殑鐢ㄦ埛銆佽鑹插拰 ACL JDBC
  • Integrated form-based and BASIC authentication BASIC 浠諱綍 BASIC
  • Remember-me services Acegi remember-me

1.1.

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

2.2. 3.3. Del 4.4. Admin Permission 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> -RW-D 絎簩鍒椾篃琛ㄧず鏉冮檺錛屼絾瀹冩槸浠ョ被浼?/span> unix [22] , 絎笁鍒楁槸鐢ㄦ埛鍚嶇О銆?/span>

Del 5.5.

Contact:

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


Recipient:


Permission:


scott John scott John

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


Binary 2006-09-01 13:40 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 久久久久亚洲AV无码专区网站 | 国产精品免费无遮挡无码永久视频 | 免费夜色污私人影院网站电影| 在线看片免费人成视频福利| 四虎成人免费网址在线| 亚洲女初尝黑人巨高清| 亚洲日韩精品无码专区加勒比| 一级做a毛片免费视频| 女人让男人免费桶爽30分钟| 亚洲偷偷自拍高清| 久久精品无码精品免费专区| 亚洲精品无码高潮喷水在线| 黄色免费在线网址| 全免费a级毛片免费看不卡| 久久精品国产亚洲av麻豆色欲| 又硬又粗又长又爽免费看 | eeuss影院www天堂免费| 免费的一级黄色片| 久久精品熟女亚洲av麻豆| 91成年人免费视频| 亚洲av永久无码制服河南实里| 污污免费在线观看| 亚洲人成人无码网www国产| 亚洲色大网站WWW永久网站| 日韩免费一区二区三区在线播放| 亚洲第一区香蕉_国产a| eeuss免费影院| 久久亚洲国产精品一区二区| 黄色短视频免费看| 亚洲国产成人VA在线观看| 国产偷国产偷亚洲清高APP| 亚洲高清视频一视频二视频三| 久久最新免费视频| 亚洲AV乱码久久精品蜜桃| 国产成人精品免费视频网页大全 | 免费国产a理论片| 在线亚洲97se亚洲综合在线| 丁香六月婷婷精品免费观看| 亚洲乱码国产乱码精品精| 中文字幕免费视频一| 日韩精品一区二区亚洲AV观看|