锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲三级视频在线观看,亚洲2022国产成人精品无码区 ,亚洲综合精品香蕉久久网http://www.tkk7.com/fengtaishao/category/7212.htmlJAVA澶瀬zh-cnWed, 28 Feb 2007 02:51:37 GMTWed, 28 Feb 2007 02:51:37 GMT60Validator 鍥涙鏇?/title><link>http://www.tkk7.com/fengtaishao/articles/10138.html</link><dc:creator>椋庡お灝?/dc:creator><author>椋庡お灝?/author><pubDate>Mon, 15 Aug 2005 05:23:00 GMT</pubDate><guid>http://www.tkk7.com/fengtaishao/articles/10138.html</guid><wfw:comment>http://www.tkk7.com/fengtaishao/comments/10138.html</wfw:comment><comments>http://www.tkk7.com/fengtaishao/articles/10138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/fengtaishao/comments/commentRss/10138.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/fengtaishao/services/trackbacks/10138.html</trackback:ping><description><![CDATA[<div class="86g20gs" id=divarticlecontent> <H3 class=title>Validator 鍥涙鏇?/H3><BR> <P>from:http://www.matrix.org.cn/blog/magicgod/</P><BR> <P>1.<FONT color=red>NewTaskGroupForm</FONT> extends <FONT color=red>ValidatorForm</FONT><BR>騫朵笖鍘繪帀<FONT color=red>validate</FONT>鍑芥暟</P><BR> <P>2.validation.xml:<BR><form name="<FONT color=red>newTaskGroupForm</FONT>"><BR><field property="<FONT color=red>tg_name</FONT>" depends="<FONT color=red>required</FONT>"><BR><arg key="<FONT color=red>label.taskgroup.tg_name</FONT>" position="0"/><BR></field><BR><field property="starttime" depends="long"><BR><arg key="label.taskgroup.starttime" position="0"/><BR></field><BR><field property="interval" depends="long"><BR><arg key="label.taskgroup.interval" position="0"/><BR></field><BR></form><BR>鍏朵腑錛歯ewTaskGroupForm鏄妱<FONT color=red>struts-config.xml</FONT><BR>tg_name鏄瓧孌靛悕錛屾妱<FONT color=red>NewTaskGroupForm.java</FONT><BR>depends="required"閲宺equired鏄妱<FONT color=red>validation-rules.xml</FONT><BR>label.taskgroup.tg_name錛屾妱<FONT color=red>ApplicationResources_zh_CN.properties</FONT><BR>position="0"鏄寚鍙傛暟浣嶇疆錛岀敤浜?errors.long=<FONT color=red>{0}</FONT> 蹇呴』杈撳叆闀挎暣鏁?/P><BR> <P>3.<FONT color=red>ApplicationResources_zh_CN.properties</FONT><BR>榪欎簺鏄瓧孌靛悕錛氳窡validation.xml瀵瑰簲<BR>label.taskgroup.tg_name=浠誨姟緇勫悕縐?BR>label.taskgroup.starttime=寮濮嬫椂闂?BR>label.taskgroup.interval=姣忚榪愯闂撮殧鏃墮棿</P><BR> <P>浠ヤ笅榪欎簺鏄叕鍏變俊鎭紝璺焩alidation-rules.xml瀵瑰簲<BR>errors.required=<FONT color=red>{0}</FONT> 涓嶈兘涓虹┖錛屽繀欏昏緭鍏?BR>errors.long={0} 蹇呴』杈撳叆闀挎暣鏁?/P><BR> <P>4.浠ヤ笂鏄彁浜ゆ牎楠岋紝濡傛灉闇瑕佸姞鍏s<BR><html:javascript formName="<FONT color=red>newTaskGroupForm</FONT>"/><BR>娉ㄦ剰formName="newTaskGroupForm"瑕佸啓姝g‘</P><BR> <P>鍦╢orm涓婂姞鍏nsubmit="return validate<FONT color=red>NewTaskGroupForm</FONT>(this)"<BR>鍑芥暟鍚嶅悗鍗婇儴鍒嗘槸formName錛屽緢鏈夎寰嬬殑</P></DIV><BR><IFRAME name=articleforum marginWidth=0 marginHeight=0 src="http://www.matrix.org.cn/articleforum.shtml" frameBorder=0 width=700 scrolling=no height=270></IFRAME><img src ="http://www.tkk7.com/fengtaishao/aggbug/10138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/fengtaishao/" target="_blank">椋庡お灝?/a> 2005-08-15 13:23 <a href="http://www.tkk7.com/fengtaishao/articles/10138.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>struts婧愪唬鐮侀槄璇伙紙struts 鍒濆鍖栵級http://www.tkk7.com/fengtaishao/articles/10127.html椋庡お灝?/dc:creator>椋庡お灝?/author>Mon, 15 Aug 2005 04:31:00 GMThttp://www.tkk7.com/fengtaishao/articles/10127.htmlhttp://www.tkk7.com/fengtaishao/comments/10127.htmlhttp://www.tkk7.com/fengtaishao/articles/10127.html#Feedback0http://www.tkk7.com/fengtaishao/comments/commentRss/10127.htmlhttp://www.tkk7.com/fengtaishao/services/trackbacks/10127.htmlhttp://www.matrix.org.cn/resource/article/1/1071.html
璇存槑錛氭湰鏂囧彲鑳界敱Matrix鍘熷垱錛屼篃鍙兘鐢盡atrix鐨勪細鍛樻暣鐞嗭紝鎴栬呯敱
Matrix鐨凜rawler鍦ㄥ叏鐞冪煡鍚岼ava鎴栬呭叾浠栨妧鏈浉鍏崇珯鐐規姄鍙栧茍姘鎬箙
淇濈暀闀滃儚錛孧atrix浼氫繚鐣欐墍鏈夊師鏉ョ殑鍑哄URL錛屽茍鍦ㄦ樉钁楀湴鏂逛綔鍑鴻鏄庯紝
濡傛灉浣犲彂瑙夊嚭澶刄RL鏈夎錛岃鑱旂郴Matrix鏀規.
鎴戝湪鍑犱釜鏈堝墠鏇劇粡鍙戣〃榪囦竴涓笘瀛愶紝灝辨槸鍜屽ぇ瀹朵竴璧峰涔爏truts婧愪唬鐮併傛垚涓轟竴鍚嶅悎鏍肩殑紼嬪簭鍛橈紝闃呰澶ч噺鐨勪紭縐紼嬪簭鏄繀涓嶅彲灝戠殑銆傚彧鐪嬩功鏄笉浼氳浣犳按騫蟲湁寰堝ぇ鎻愰珮鐨勶紝瑕佸鐪嬪鍐欍?BR>鏈潵鏄墦綆楃瓑涓嬮潰鍑犵瘒鏂囩珷鍐欏ソ鍚庝竴璧峰彂甯冪殑錛岃繖鏍峰ぇ瀹跺彲鑳芥墠鑳界湅寰楁槑鐧戒簺錛屼絾鏄牴鎹垜鐜板湪鐨勭姸鍐碉紝浼拌榪樿涓銆佷袱涓湀銆傛墍浠ワ紝涓轟簡闃叉鍦╯truts婧愪唬鐮佸彂鐢熻繃澶у彉鍖栧悗鎴戠殑鏂囩珷灝辨病鏈夊お澶т環鍊間簡錛屾墍浠ュ氨鎻愬墠鍙戣〃浜嗭紝闇嶉湇~~~
鎴戠殑email涓猴細mariah_fan@hotmail.com錛屾湁浠涔堜笉瀵圭殑鍦版柟璇峰ぇ瀹舵寚姝o細錛?BR>struts浣滀負J2EE鐨凪VC妗嗘灦宸茬粡鍙栧緱浜嗗緢澶х殑鎴愬姛錛屼笅闈㈠皢鍒嗗嚑綃囨枃绔犺鏄巗truts婧愮▼搴忕殑緇撴瀯銆?BR>絎竴綃?struts鐨勫垵濮嬪寲

struts 鐨勬牳蹇冪被鏄痮rg.apache.struts.action.ActionServlet錛岃繖涓被灝嗕細鍦╯truts絎竴嬈′嬌鐢ㄦ椂錛?BR>浣滀負servlet鍒濆鍖栧茍瀛樺叆tomcat瀹瑰櫒銆傚緢鏄劇劧鐨勶紝鍒濆鍖栧皢浼氳皟鐢╥nit鏂規硶鍒濆鍖栫浉搴旂殑鏁版嵁銆?BR>
涓銆乮nitInternal()鏂規硶錛?BR>閫氳繃璋冪敤MessageResources.getMessageResources(internalName)鏂規硶鐢熸垚涓涓?BR>MessageResources綾伙紝getMessageResources鏄氳繃璋冪敤MessageResourcesFactory.
createResources(config)鏉ュ疄鐜扮殑銆傝嚦浜嶮essageResourcesFactory鏄竴涓猘bstract綾伙紝浠諱綍
緇ф壙鑷畠鐨勭被閮借瀹炵幇createResources鏂規硶錛岀敓鎴怣essageResources瀵硅薄銆傛暣涓▼搴忕敓鎴?BR>MessageResourcesFactory浣跨敤浜嗗涓嬫妧宸э細
MessageResourcesFactory.factoryClass = factoryClass;
MessageResourcesFactory.clazz = null;
棣栧厛浼氶氳繃factoryClass鏉ュ畾涔変竴涓被鍏ㄥ悕錛岀劧鍚庨氳繃ClassLoader.loadClass
(factoryClass)鏂規硶鏉ョ敓鎴愯繖涓被錛屽茍璧嬬粰clazz錛岀劧鍚庨氳繃newInstance鏉ョ敓鎴愪竴涓璞°?BR>鍦ㄦ湰紼嬪簭涓紝鐢熸垚MessageResources瀵硅薄瀹為檯灝辨槸瀵瑰涓嬪睘鎬ц繘琛屼簡鍒濆鍖栵細
this.factory = factory;("org.apache.struts.util.PropertyMessageResourcesFactory")
this.config = config;("org.apache.struts.action.ActionResources")
this.returnNull = returnNull;(true/false)

瀵逛簬MessageResources綾葷殑浣滅敤鏄牴鎹笉鍚岀殑Locate鏉ユ牸寮忓寲鐩稿簲鐨剆tring銆傛垨鑰呮妸浣犻渶瑕佹敼鍙?BR>鐨剆tring瀛樻斁鍒版暟緇勪腑錛岀劧鍚庨氳繃getMessage(Locale locale, String key, Object args[])
鏂規硶鏉ユ牸寮忓寲銆傜劧鍚庢妸鏍煎紡濂界殑string瀛樻斁鍒癏ashMap閲岋紝榪欐牱灝卞彲浠ヤ負浠ュ悗閲嶇敤銆傝繖閲岀殑key鏄?BR>浣跨敤鐨刲ocale.toString() + "." + key

鍦≒ropertyMessageResources涓殑loadLocale鏂規硶鐢ㄦ潵璇誨彇resource鐨勫垵濮嬪寲淇℃伅銆傞鍏堝畠浼?BR>閫氳繃涓涓狧ashMap媯嫻嬭繖涓猯ocalKey鐩稿叧鐨刴essage鏄惁宸茬粡琚垵濮嬪寲浜嗭紝濡傛灉琚垵濮嬪寲榪囧氨璺?BR>鍑猴紝媯嫻嬬殑鏂規硶鏄痩ocales.get(localeKey) != null銆?BR>鐒跺悗浼氳鍙栧涓嬩竴涓枃浠訛細
org/apache/struts/action/ActionResources_(localKey).properties錛岀劧鍚庤繘琛屽涓嬫搷浣滐細
Properties props = new Properties();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
is = classLoader.getResourceAsStream(name);
props.load(is);
Iterator names = props.keySet().iterator();
while (names.hasNext()) {
String key = (String) names.next();
if (log.isTraceEnabled()) {
log.trace(" Saving message key '" + messageKey(localeKey, key));
}
messages.put(messageKey(localeKey, key), props.getProperty(key));
}

PropertyMessageResources 灝辨槸閫氳繃涓婇潰鐨刲oadLocale鏂規硶鏌ユ壘涓嶭ocale locale, String key
鐩稿瀵瑰簲鐨凪essage.鏌ユ壘鐨勬搴忓涓媗ocale.toString()錛岀劧鍚庢槸
localeKey = localeKey.substring(0, underscore)錛岀劧鍚庢槸defaultLocale錛岀劧鍚庢槸key銆?BR>
鏈鍚庯紝resource綾葷殑緇撴瀯濡備笅錛?BR>PropertyMessageResources extends MessageResources
PropertyMessageResourcesFactory extends MessageResourcesFactory

浜屻乮nitOther()鏂規硶錛?BR>浠巗ervlet涓幏鍙朿onfig鍜宒ebug涓や釜鍙傛暟錛岀劧鍚庡垵濮嬪寲ConvertUtils瀵硅薄銆傜敱浜?BR>ConvertUtils.deregister()鐨勫垵濮嬪寲錛屾墍鏈夌殑Converter閮芥槸鏈夊垵濮嬪肩殑錛屾墍浠ヨ繖閲孲truts鑷繁
鎶婅繖浜涘垵濮嬪艱緗負null錛屽嵆杞崲鍑洪敊鐨勬椂鍊欒繑鍥瀗ull錛岃屼笉鏄垵濮嬪箋備嬌鐢–onvertUtils綾葷殑
鍘熷洜鏄敱浜庝粠form浼犺緭榪囨潵鐨勯兘鏄疭tring綾誨瀷鐨勫鹼紝鎵浠ユ垜浠鎶婂畠浠漿鎹㈡垚鐩稿簲鐨勭被鍨嬨?BR>
鎻愬埌鍑犱釜鎶宸э細
*public boolean isIndexed() {
if (type == null) {
return (false);
//鎶宸т竴錛氬垽鏂槸鍚︽槸涓涓狝rray綾葷殑鏂規硶
} else if (type.isArray()) {
return (true);
//鎶宸т簩錛氬垽鏂璽ype鏄惁鏄疞ist鐨勪竴涓埗綾繪垨鑰呯埗鎺ュ彛錛屾垨鑰呬笌List涓哄悓涓涓被
//瑕佹敞鎰忓鏋淟ist鏄彟涓涓猵rimitive鐨凾YPE綾伙紝閭d箞type蹇呴』涔熸槸榪欎釜綾繪墠浼?BR>//榪斿洖true錛屽惁鍒欓兘鏄痜alse銆傛敞鎰弆ong.TYPE涓嶭ong.class鏄笉鍚岀殑
} else if (List.class.isAssignableFrom(type)) {
return (true);
} else {
return (false);
}
}

*//componentType涓篈rray綾繪墍瀛樺偍鐨勫厓绱犵殑綾誨埆
Class componentType = indexedProperty.getClass().getComponentType();
//鐢熸垚涓涓柊鐨凙rray
Object newArray = Array.newInstance(componentType, (index + 1));
System.arraycopy(indexedProperty, 0, newArray, 0, length);
indexedProperty = newArray;
set(name, indexedProperty);
int newLength = Array.getLength(indexedProperty);
for (int i = length; i < newLength; i++) {
Array.set(indexedProperty, i, createProperty(name+"["+i+"]", componentType));
}

涓夈乮nitServlet()鏂規硶錛?BR>榪欎釜鏂規硶涓昏鏄氳繃digester綾昏В鏋恮eb.xml錛屽String servletMapping灞炴ц繘琛屽垵濮嬪寲銆傚浜?BR>digester璇存槑濡備笅錛氳繖鏄竴涓熀浜嶥OM鐨凷AX瀹炵幇鐨勭被錛屽畠鏄簨浠惰Е鍙戠殑錛屾牴鎹畑ml鏂囦歡鐨勭粨鏋勶紝
姣忔璇誨埌涓涓妭鐐瑰厓绱犲氨浼氳Е鍙戜竴涓簨浠躲?BR>
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/web.xml");
榪欐槸涓涓瘮杈冨皯瑙佺殑鏂規硶銆傞鍏堥氳繃this.servletName = getServletConfig().
getServletName()鑾峰彇servlet鐨勫悕縐幫紝鐒跺悗鏍規嵁
if (servletName.equals(this.servletName)) {
this.servletMapping = urlPattern;
}
鏉ュ垽鏂綋鍓嶈鍒扮殑servlet鍚嶇О鏄惁鏄垜浠繍琛岀殑servlet鐨勫悕縐幫紝濡傛灉鏄紝灝辨妸url-pattern浣滀負
鎴戜滑鐨剆ervletMapping銆?BR>
鍥涖乬etServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this)
鎶婅嚜宸卞瓨鍌ㄥ埌servletContext涓紝灞炴у悕涓篏lobals.ACTION_SERVLET_KEY銆?BR>
浜斻丮oduleConfig moduleConfig = initModuleConfig("", config)
榪欎釜鏂規硶浣跨敤鐢眎nitOther()鏂規硶鑾峰彇鐨刢onfig鍊間負瑕佽В鏋愮殑xml璺緞錛岀敤鏉ュ垵濮嬪寲ModuleConfig銆?BR>瀹冮鍏堥噰鐢ㄤ笌鐢熸垚MessageResourcesFactory鍚屾牱鐨勬柟娉曚駭鐢熶竴涓狹essageResourcesFactory瀵硅薄錛?BR>MessageResourcesFactory涓轟竴涓娊璞$被錛屾瘡涓涓戶鎵垮畠鐨勭被閮借瀹炵幇
createModuleConfig(String prefix)鏂規硶銆傛湰紼嬪簭浣跨敤鐨勭己鐪佺殑MessageResourcesFactory綾諱負
org.apache.struts.config.impl.DefaultModuleConfigFactory錛屽畠
鐨刢reateModuleConfig(String prefix)鏂規硶浼氱敓鎴愪竴涓狹oduleConfigImpl綾匯?BR>
ModuleConfigImpl綾葷浉褰撲簬涓涓狫avaBean錛岀敤鏉ュ瓨鏀句竴涓獁eb妯″潡榪愯鏃舵墍闇瑕佺殑閰嶇疆淇℃伅銆傚綋
鐒訛紝涓涓獁eb妯″潡鍙互鎷ユ湁澶氫釜ModuleConfig錛屼絾鏄己鐪佺殑鏄痯refix闀垮害涓?鐨凪oduleConifg銆傚畠
鐨勬瘡涓睘鎬у嚑涔庨兘鏄敱HashMap緇勬垚鐨勶紝瀹冮氳繃涓涓猚onfigured甯冨皵鍊兼潵鎻忚堪褰撳墠鐨凪oduleConfig
鏄惁宸茬粡琚垵濮嬪寲瀹屾瘯錛屽湪姣忓瓨鏀句竴涓睘鎬х殑鏃跺欓兘浼氱洃嫻嬭繖涓箋傚鏋滃垵濮嬪寲瀹屾瘯鑰岃繕瑕佹敼鍙?BR>閲岄潰鐨勫睘鎬у鹼紝鍒欎細鎶ュ嚭IllegalStateException("Configuration is frozen")寮傚父錛岀幇鍦ㄥ瀹?BR>鐨勫睘鎬х畝鍗曡鏄庡涓嬶細
* protected HashMap actionConfigs錛?BR>榪欎釜HashMap鐢ㄦ潵瀛樺偍ActionConfig瀵硅薄銆?BR>* protected HashMap dataSources
榪欎釜HashMap鐢ㄦ潵瀛樺偍DataSourceConfig瀵硅薄銆?BR>* protected HashMap exceptions
榪欎釜HashMap鐢ㄦ潵瀛樺偍ExceptionConfig瀵硅薄銆?BR>* protected HashMap formBeans
榪欎釜HashMap鐢ㄦ潵瀛樺偍FormBeanConfig瀵硅薄銆?BR>* protected HashMap forwards
榪欎釜HashMap鐢ㄦ潵瀛樺偍ForwardConfig瀵硅薄銆?BR>* protected HashMap messageResources
榪欎釜HashMap鐢ㄦ潵瀛樺偍MessageResourcesConfig瀵硅薄銆?BR>* protected ArrayList plugIns
榪欎釜HashMap鐢ㄦ潵瀛樺偍PlugInConfig瀵硅薄銆?BR>* protected ControllerConfig controllerConfig
ControllerConfig綾?BR>* protected boolean configured
鏍囧織榪欎釜ModuleConfig鏄?true)鍚?false)閰嶇疆瀹屾垚銆?BR>* protected String prefix
鐢ㄦ潵鏍囧織鍜屽尯鍒哅oduleConfig綾伙紝鍚屾椂鍦ㄤ嬌鐢ㄤ笂闈㈢殑config綾誨垵濮嬪寲鐩稿簲鐨勮祫婧愪互鍚庯紝涔熸槸閫?BR>榪囪繖涓猵refix鏉ュ尯鍒嗘墍灞炵殑涓嶅悓鐨剋eb妯″潡銆?BR>* protected String actionMappingClass = "org.apache.struts.action.ActionMapping"
ActionMapping綾誨悕錛岀己鐪佷負org.apache.struts.action.ActionMapping銆?BR>
鍒濆鍖朚oduleConfig鐨勬柟娉曞涓嬶細
棣栧厛鏄嬌鐢╣etServletConfig().getInitParameter("mapping")鏉ヨ幏鍙栬瀹氱殑ActionMapping綾?BR>鍚嶏紝鐒跺悗閫氳繃initConfigDigester()鏂規硶鏉ョ敓鎴愪竴涓猟igester銆傛渶鍚庣敤","鍒嗛殧config錛屽姣忎竴
鍧楄皟鐢╬arseModuleConfigFile(prefix, paths, config, digester, path)鏂規硶瑙f瀽銆傛敞鎰忥紝榪?BR>涓柟娉曞疄闄呬笂鍙湁涓や釜鍙傛暟鏄湁鎰忎箟鐨勶細path涓烘垜浠瑙f瀽鐨剎ml鏂囦歡錛宑onfig鐢ㄦ潵鍒濆鍖栧畬鎴?BR>鍚庝繚瀛樺埌servletContext涓?BR>
濡傛灉ModuleConfig涓瓨鏀劇殑FormBeanConfig涓篋ydamic綾誨瀷錛岄偅涔堝氨璋冪敤
DynaActionFormClass.createDynaActionFormClass(FormBeanConfig)鍒濆鍖?BR>DynaActionFormClass錛屽茍瀛樻斁鍒癉ynaActionFormClass.dynaClasses 鐨?static HashMap涓傝繖
閲岀殑key涓篎ormBeanConfig.getName() + moduleConfig.getPrefix()銆?BR>
濡傛灉褰撳墠鐨凪oduleConfig涓虹己鐪佺殑ModuleConfig錛岄偅涔堝皢浼氳皟鐢ㄥ涓嬪嚑涓柟娉曪細
defaultControllerConfig(config)
defaultMessageResourcesConfig(config)
defaultFormBeansConfig(config)
defaultForwardsConfig(config)
defaultMappingsConfig(config)
鍦╯truts1.1浠ュ悗錛岃繖涓壒渚嬪皢浼氳搴熷純錛?BR>
defaultControllerConfig(config)涓篊ontrollerConfig閫氳繃getInitParameter(s)鏂規硶鍒濆鍖栧
涓嬪嚑涓睘鎬э細bufferSize錛宑ontent錛宭ocale(true/false)錛宮axFileSize錛宯ocache(true/false)
錛宮ultipartClass錛宼empDir銆?BR>
defaultMessageResourcesConfig(config)涓篗essageResourcesConfig閫氳繃getInitParameter(s)
鏂規硶鍒濆鍖栧涓嬪嚑涓睘鎬э細application錛宖actory錛宯ull(true/false)銆?BR>
鍏跺畠鐨勫嚑涓柟娉曞氨鏄幏鍙栦笉鍚岀殑瀵硅薄錛岀劧鍚庢妸瀹冧滑鐩稿簲鐨勫瓨鍌ㄥ埌servlet涓傚叧蹇冨涓嬶細
ActionFormBeans=>FormBeanConfig錛孉ctionForwards=>ForwardConfig錛?BR>ActionMappings=>ActionConfig銆?BR>
鍏乮nitModuleMessageResources(ModuleConfig config)
閫氳繃瀛樺偍鍦∕oduleConfig涓殑MessageResourcesConfig瀵硅薄錛岄愪釜鍒濆鍖朚essageResource錛?BR>鐒跺悗鍐嶆妸鍒濆鍖栧ソ鐨凪essageResources瀛樻斁鍒癝ervletContext涓紝attributeName涓?BR>MessageResourcesConfig.getKey() + ModuleConfig.getPrefix()銆?BR>
涓冦乮nitModuleDataSources(ModuleConfig config)
閫氳繃瀛樺偍鍦∕oduleConfig涓殑DataSourceConfig瀵硅薄錛岄愪釜鍒濆鍖朌ataSource銆傜劧鍚庡浜庢瘡涓涓?BR>DateSource閫氳繃BeanUtils.populate(ds, dscs[i].getProperties())鏂規硶鍒濆鍖栧叾灞炴с傚啀鎶婂垵
濮嬪寲濂界殑DateSource瀛樻斁鍒癝ervletContext涓紝attributeName涓?BR>DataSourceConfig.getKey() + ModuleConfig.getPrefix()銆傚悓鏃朵篃瀛樻斁鍒板悕浣峝ataSources鐨?BR>FastHashMap涓紝key涓篋ataSourceConfig.getKey()銆?BR>
榪欓噷榪樹細鏍規嵁鐢熸垚鐨凞ateSource瀵硅薄鏄惁鏄疓enericDataSource綾誨瀷錛屽鏋滄槸鍒欒皟鐢?BR>GenericDataSource.open()鏂規硶銆侴enericDataSource鏄竴涓潪甯哥畝鍗曠殑鏁版嵁搴撹繛鎺ユ睜錛屽畠鐨?BR>open()鏂規硶鐢ㄦ潵鍒濆鍖栬繛鎺ユ睜錛岀敓鎴愭渶灝忔暟鐩殑GenericConnection錛岃繖閲岀殑open()鏂規硶鏍規嵁
String driver鍙橀噺鏄惁涓簄ull鏉ュ垽鏂槸鍚﹀凡緇忚鍒濆鍖栬繃銆傞渶瑕佷粩緇嗚鏄庣殑鏄痝etConnection()
鏂規硶錛屽畠棣栧厛浠庤繛鎺ユ睜涓彇鍑篏enericConnection瀵硅薄錛岀劧鍚庢鏌ュ叾鏄惁鏄彲閾炬帴鐨勶紝濡傛灉鏄氨
榪斿洖錛屽惁鍒欑戶緇彇鍑猴紝鍚屾椂activeCount-1銆傚鏋滄病鏈夊彇鍒幫紝鍒欎細媯鏌ュ綋鍓嶅彲浣跨敤鐨?BR>GenericConnection鏄惁杈懼埌鏈澶у?activeCount < maxCount)錛屽鏋滄病鏈夛紝璋冪敤
createConnection()鏂規硶澹版垚涓涓柊鐨凣enericConnection錛岀劧鍚庢鏌ュ叾鏄惁鏄彲閾炬帴錛屽鏋滃彲浠?BR>鍒欒繑鍥炪俽eturnConnection(GenericConnection conn)鏂規硶鍒欐槸閫氳繃鎶奊enericConnection鏀懼洖鍒?BR>榪炴帴姹狅紝鐒跺悗activeCount-1銆?BR>
榪欎釜鏂規硶涓嬌鐢ㄥ埌浜哠ervletContextWriter綾伙紝DateSource鐨刲og淇℃伅灝遍氳繃榪欎釜綾誨啓鍏ャ傚榪欎釜
綾昏鏄庡涓嬶細
瀹冪戶鎵胯嚜PrintWriter錛岃孭rintWriter鍙堢戶鎵胯嚜Writer銆俉riter綾繪墍浣滅殑浜嬫儏灝辨槸鍦ㄥ悓姝ョ殑鎯呭喌涓?BR>璋冪敤abstract鏂規硶錛歛bstract public void write(char cbuf[], int off, int len)錛岃繖涓柟娉?BR>灝嗕細鏍規嵁璋冪敤鑰呯殑闇瑕佺敱璋冪敤鑰呭疄鐜般?BR>PrintWriter鍒欓鍏堥氳繃ensureOpen()鏂規硶媯楠岃繖涓被涓槸鍚︽湁鍐欏叆鐨勫璞?Writer綾繪垨鍏跺瓙綾?錛?BR>濡傛灉鏈夊垯鏍規嵁涓嶅悓鐨勬儏鍐佃皟鐢ㄨ繖涓啓鍏ュ璞$殑write鏂規硶(out.write(....))銆傝繖涓被鐨刾rint(...)
鏂規硶灝辨槸鎹笉鍚岀殑鎯呭喌璋冪敤鐩稿簲鐨剋rite(...)鏂規硶銆傝宲rintln(...)涓庝箣鐨勫尯鍒氨鏄瘡嬈″鍐欏叆涓
涓崲琛屽瓧絎︿覆銆傝繕鏈変竴涓尯鍒槸println(...)浼氭牴鎹槸鍚﹂渶瑕乤utoflush榪涜flush錛岃寃rite(...)
鏂規硶涓嶄細銆?BR>ServletContextWriter綾葷殑浣滅敤鏄妸瀛楃鍐欏叆ServletContext涓係ervletContextWriter綾繪柟娉曚腑
鐪熸瀹炵幇浜唚rite鏂規硶錛?BR>public void write(char c) {
if (c == '\n')
flush();
else if (c != '\r')
buffer.append(c);
}
public void flush() {
if (buffer.length() > 0) {
context.log(buffer.toString());
buffer.setLength(0);
}
}

鍏乮nitModulePlugIns(moduleConfig)
閫氳繃瀛樺偍鍦∕oduleConfig涓殑PlugInConfig瀵硅薄錛岄愪釜鍒濆鍖朠lugIn瀵硅薄錛屽瓨鏀懼埌涓涓暟緇勪腑錛?BR>鐒跺悗鍐嶆妸榪欎釜鏁扮粍瀛樻斁鍒癝ervletContext涓紝attributeName涓?BR>Globals.PLUG_INS_KEY + ModuleConfig.getPrefix()銆?BR>
瀵規瘡涓涓敓鎴愮殑PlugIn瀵硅薄閫氳繃
BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties())鏂規硶鍒濆鍖栧叾灞炴с傜劧鍚?BR>鍐嶆妸PlugInConfig瀵硅薄瀛樻斁鍒扮敱鍏剁敓鎴愮殑PlugIn瀵硅薄涓?BR>
鏈鍚庯紝閫氳繃plugIns[i].init(this, (ModuleConfig) config)鍒濆鍖栬繖涓猵lugIn瀵硅薄銆?BR>
涔濄佸垵濮嬪寲緇撴潫
瀹屾垚浜嗚繖涓垵濮嬪寲浠ュ悗錛屼細璋冪敤ModuleConfig.freeze()浠よ繖涓狹oduleConfig鍙樺緱涓嶅彲鏀瑰彉銆傜劧鍚?BR>浼氶亶鍘哠ervletConfig涓殑initParameterNames錛屽鏋滄湁浠?config/"寮澶寸殑錛屽垯閫氳繃榪欎釜parameter
鐨勫肩戶緇垵濮嬪寲鍏跺畠鐨凪oduleConfig錛屼笖榪欎釜ModuleConfig鐨刾refix涓?config/"鍚庣殑瀛楃涓層?BR>
鍚屾牱璋冪敤濡備笅鏂規硶錛?BR>initModuleMessageResources(moduleConfig);
initModuleDataSources(moduleConfig);
initModulePlugIns(moduleConfig);
moduleConfig.freeze();

鏈鍚庤皟鐢╠estroyConfigDigester()閲婃斁鍐呭瓨銆?


]]>
struts婧愪唬鐮侀槄璇伙紙Commons-Beanutils鍖咃級http://www.tkk7.com/fengtaishao/articles/10126.html椋庡お灝?/dc:creator>椋庡お灝?/author>Mon, 15 Aug 2005 04:28:00 GMThttp://www.tkk7.com/fengtaishao/articles/10126.htmlhttp://www.tkk7.com/fengtaishao/comments/10126.htmlhttp://www.tkk7.com/fengtaishao/articles/10126.html#Feedback0http://www.tkk7.com/fengtaishao/comments/commentRss/10126.htmlhttp://www.tkk7.com/fengtaishao/services/trackbacks/10126.html鎽樿錛?BR>鏃㈢劧鏄Struts婧愪唬鐮侊紝涓轟粈涔堣璁睠ommons-Beanutils鍖呭憿錛熷師鍥犲緢綆鍗曪紝Struts鐨凞ynaFormBean灝辨槸閫氳繃榪欎釜鍖呴噷鐨勭浉鍏崇被瀹炵幇鐨勩傛湰鏂囧Commons-Beanutils 婧愪唬鐮佽繘琛屼簡鍒嗘瀽..


鏈枃Matrix姘鎬箙闀滃儚錛?A >http://www.matrix.org.cn/resource/article/1/1708_struts.html
璇存槑錛氭湰鏂囧彲鑳界敱Matrix鍘熷垱錛屼篃鍙兘鐢盡atrix鐨勪細鍛樻暣鐞嗭紝鎴栬呯敱
Matrix鐨凜rawler鍦ㄥ叏鐞冪煡鍚岼ava鎴栬呭叾浠栨妧鏈浉鍏崇珯鐐規姄鍙栧茍姘鎬箙
淇濈暀闀滃儚錛孧atrix浼氫繚鐣欐墍鏈夊師鏉ョ殑鍑哄URL錛屽茍鍦ㄦ樉钁楀湴鏂逛綔鍑鴻鏄庯紝
濡傛灉浣犲彂瑙夊嚭澶刄RL鏈夎錛岃鑱旂郴Matrix鏀規.
鏃㈢劧鏄Struts婧愪唬鐮侊紝涓轟粈涔堣璁睠ommons-Beanutils鍖呭憿錛熷師鍥犲緢綆鍗曪紝Struts鐨凞ynaFormBean灝辨槸閫氳繃榪欎釜鍖呴噷鐨勭浉鍏崇被瀹炵幇鐨勩傚悓鏍鳳紝鐣欎笅鎴戠殑閭錛屾柟渚垮拰澶у鍏卞悓浜ゆ祦銆傛垜鐨勯偖綆辨槸錛歮ariah_fan@hotmail.com銆?BR>
Commons-Beanutils錛堜竴錛?

Commons-Beanutils 榪欎釜鏄痡akarta commons欏圭洰涓殑涓涓瓙欏圭洰銆傝繖涓」鐩紑鍙戠殑鐩殑鏄府鍔╁紑鍙戣呭姩鎬佺殑鑾峰彇/璁懼糐ava Bean鐨勫睘鎬э紝鍚屾椂瑙e喅姣忔閮借鍐檊etXXX鍜宻etXXX鐨勯夯鐑︺?BR>
涓銆乆XXConvert
榪欎簺綾婚兘瀹炵幇Converter鎺ュ彛錛屾彁渚涙妸value鍊艱漿鍖栨垚涓虹浉搴擷XX綾葷殑瀹炵幇銆傜幇鍦ㄥ彧閽堝鍥涚綾誨瀷錛氭暟瀛楋紝鏃墮棿錛孊oolean鍜孲tring銆傚湪Converter 鎺ュ彛涓彧鏈変竴涓柟娉昪onvert(Class type, Object value)錛屾妸value瀵硅薄杞崲涓簍ype鎵瑕佹眰鐨勭被銆俋XXConvert綾諱腑榪欎釜鏂規硶鐨勬濊礬鏄細
1銆佸鏋渧alue==null錛屽茍涓旇嚜宸卞唴閮ㄦ湁緙虹渷鐨勫奸偅涔堝氨榪斿洖榪欎釜緙虹渷鐨勫箋傚鏋滄病鏈夌己鐪佸鹼紝灝辨姏鍑篊onversionException寮傚父銆?BR>2銆佸鏋渧alue instanceOf XXX綾伙紝閭d箞灝辯洿鎺ヨ繑鍥瀡alue銆?BR>3銆佸鏋滀笂闈㈢殑閮戒笉琛岋紝閭d箞璋冪敤new XXX(value.toString())鎴栬匵XX.valueOf(value.toString())鏂規硶鏉ヨ繑鍥炪傝漿鍖栧け璐ユ椂錛屾姏鍑篊onversionException寮傚父銆?BR>
浜屻佺壒孌婄殑瀹炵幇
1銆佸浜嶤lassConverter綾伙紝褰撹繘鍏ョ涓夌鎯呭艦鐨勬椂鍊欙紝瀹為檯鎵ц鐨勬槸
ClassLoader classLoader =Thread.currentThread().getContextClassLoader();
   if (classLoader == null) {
       classLoader = ClassConverter.class.getClassLoader();
   }
   return (classLoader.loadClass(value.toString()));


2銆佸浜嶣ooleanConverter綾伙紝褰撹繘鍏ョ涓夌鎯呭艦鐨勬椂鍊欙紝瀹為檯鎵ц鐨勬槸錛屾牴鎹畍alue.toString()鐨勫鹼細yes錛寉錛宼rue, on, 1 榪斿洖true錛沶o錛宯錛宖alse錛宱ff錛? 榪斿洖false銆傚鏋滆繖浜涙儏褰㈤兘涓嶇鍚堬紝騫朵笖鏈夌己鐪佸肩殑鏃跺欏垯榪斿洖緙虹渷鍊箋傚惁鍒欐姏鍑篊onversionException錛?BR>
涓夈乆XXArrayConverter
榪欎簺綾葷戶鎵胯嚜AbstractArrayConverter綾匯?AbstractArrayConverter 瀹為檯鍙疄鐜頒簡涓涓狶ist parseElements(String svalue)鏂規硶銆傝繖涓柟娉曟帴鍙楃殑鏄瘂value1, value2,...}鏍煎紡鐨勫瓧絎︿覆錛岄愪釜瑙f瀽鍑烘潵鍚庯紝鏀懼叆涓涓狝rrayList涓傚畠閫氳繃StreamTokenizer瑙f瀽瀛楃涓詫細StreamTokenizer鏄敤鏉ュ垎紱籭nput stream涓鍙栫殑瀛楃涓詫紝騫朵笖鍙互鏍規嵁鏍囪鍖哄垎涓嶅悓鐨勫唴瀹癸紝姣斿鏁板瓧錛屽瓧絎︽垨鑰呮敞閲娿俋XXArrayConverter鐢變簬瑕佽漿鎹㈢殑鏄竴涓暟緇勶紝鎵浠onvert(....)鏂規硶鐨勫疄鐜拌繃紼嬫湁鎵涓嶅悓銆?BR>1銆佸鏋渧alue==null錛屽茍涓旇嚜宸卞唴閮ㄦ湁緙虹渷鐨勫奸偅涔堝氨榪斿洖榪欎釜緙虹渷鐨勫箋傚鏋滄病鏈夌己鐪佸鹼紝灝辨姏鍑篊onversionException寮傚父銆?BR>2銆佸鏋渕odel.getClass() == value.getClass()錛岄偅涔堝氨鐩存帴榪斿洖value銆?BR>3銆佸鏋滀笂闈㈢殑閮戒笉琛岋紝閭d箞灝遍氳繃parseElements(value.toString())鐢熸垚涓涓暟緇勶紝鍐嶅鏁扮粍鐨勫厓绱犻愪釜璋冪敤new XXX(list.get(i))鎴栬匵XX.valueOf(list.get(i))鏂規硶錛岃漿鎹㈡垚涓烘暟緇勫鍏冪礌瑕佹眰鐨勭被鍨嬨傝漿鍖栧け璐ユ椂錛屾姏鍑篊onversionException寮傚父銆?BR>
Commons-Beanutils錛堜簩錛?

涓銆丩ocaleConverter 涓?BaseLocaleConverter
LocaleConverter緇ф壙鑷?Converter鎺ュ彛錛屽畾涔変簡涓涓柊鏂規硶convert(Class type, Object value, String pattern)銆?BR>鎶借薄綾籅aseLocaleConverter瀹炵幇浜哃ocaleConverter鎺ュ彛銆傚畠鐨刲ocPattern灞炴х敤鏉ヨ〃紺鴻繖涓璞$殑pattern鏄惁鏄湰鍦板寲鐨勬牸寮忋俻atttern 鏄寚鎶婁綍縐嶆牸寮忕殑鏃墮棿鎴栬呮暟瀛楀艱漿鎹㈡垚鏍囧噯鍊箋俢onvert(...)鐨勬墽琛岃繃紼嬫槸錛?BR>1銆佸鏋渧alue==null錛屽茍涓旇嚜宸卞唴閮ㄦ湁緙虹渷鐨勫奸偅涔堝氨榪斿洖榪欎釜緙虹渷鐨勫箋傚鏋滄病鏈夌己鐪佸鹼紝灝辨姏鍑篊onversionException寮傚父銆?BR>2銆佹牴鎹弬鏁皃attern鍊兼槸鍚︿負null錛岃皟鐢╬arse(Object value, String pattern)鏂規硶錛氬鏋滆繖涓弬鏁頒笉涓簄ull閭d箞灝變嬌鐢ㄨ繖涓弬鏁扮殑鍊鹼紝鍚﹀垯浣跨敤瀵硅薄棰勫瓨鐨刾attern鍊箋傚鏋滆繖
鏍峰仛寮曡搗浜嗗紓甯革紝浼氶鍏堝垽鏂槸鍚﹁兘澶熻繑鍥炵己鐪佺殑鍊鹼紝涓嶈兘鍒欐姏鍑篊onversionException寮傚父銆?BR>3銆乸arse(Object value, String
pattern)鏂規硶鐨勫疄鐜拌鎶涜嚦緇ф壙浜嗗畠鐨勭被鍏蜂綋瀹炵幇銆傝繖涓柟娉曡櫧鐒舵妸value鍊艱〃榪頒負Object綾誨瀷錛屼絾鏄渶鍚庨兘鏄氳繃寮哄埗杞崲錛岃漿鎹㈡垚涓篠tring綾誨瀷銆備篃灝辨槸璇村畠瀹為檯涓婇渶瑕佺殑
鏄疭tring綾誨瀷鐨剉alue銆?BR>
浜屻?XXXLocaleConverter
鎶妏attern鏍煎紡鐨剉alue杞崲鎴愭爣鍑嗘牸寮忕殑鐩稿簲鐨刋XX綾匯傝繖浜涚被鍙互鍒嗕負涓ゅぇ綾伙細涓綾諱負鏃墮棿錛屼竴綾諱負鏁板箋?BR>1銆佹椂闂寸被鏈鍚庨兘浼氶氳繃SimpleDateFormat綾誨鍊艱繘琛岃漿鎹紝紼嬪簭濡備笅錛?BR>
 if(pattern == null) {      
       pattern = locPattern ? new SimpleDateFormat().toLocalizedPattern() :
                 new SimpleDateFormat().toPattern();
   }
   SimpleDateFormat format = new SimpleDateFormat(pattern, locale);
   if (locPattern) {
       formatter.applyLocalizedPattern(pattern);
   }else {
       formatter.applyPattern(pattern);
   }
   return formatter.parse((String) value);


2銆佹暟鍊肩被鏈鍚庨兘浼氶氳繃DecimalFormat綾誨鍊艱繘琛岃漿鎹紝紼嬪簭濡備笅錛?BR>
DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(locale);
   if (pattern != null) {
       if (locPattern) {
           formatter.applyLocalizedPattern(pattern);
       } else {
           formatter.applyPattern(pattern);
       }
   }
   return formatter.parse((String) value);

榪欎釜杞寲榪囩▼瑕佹敞鎰忕簿搴︾殑闂銆傜敱浜嶯umber綾繪槸鎵鏈夌殑鏁板肩被鐨勭埗綾伙紝鎵浠ヨ漿鎹㈠畬鎴愬悗瑕佹鏌ユ渶鍚庣殑緇撴灉鏄惁鏄綋鍓嶈姹傜殑綺懼害錛氬鏋滃ぇ浜庢墍瑕佹眰鐨勭簿搴︼紝鍒欐姏鍑篊onversionException寮傚父銆?BR>
Commons-Beanutils錛堜笁錛?/B>

Dyna寮澶寸殑綾伙紝鏄笓闂ㄤ負DynaFormBean鑰岃璁$殑銆?BR>
涓銆丏ynaBean錛孌ynaClass 涓?DynaProperty
DynaBean騫朵笉鏄疛ava涓墍瀹氫箟鐨凚ean錛岃屾槸涓縐嶁滃亣鈥濈殑Bean銆傚洜涓哄畠騫朵笉鏄氳繃getXXX鍜宻etXXX鏂規硶錛屽XXX灞炴ц繘琛屽彇鍊煎拰璁懼肩殑銆傚畠閫氳繃涓涓疄鐜頒簡DynaClass鎺ュ彛鐨勭被錛屽府鍔╃鐞嗗叾鎵鏈夌殑灞炴х殑綾誨埆錛岃岃嚜宸卞垯綆$悊瀵筙XX灞炴у肩殑璁懼畾鍜岃幏鍙栥傚湪璁懼肩殑鏃跺欎細閫氳繃涓巒ame瀵瑰簲鐨凞ynaProperty瀵硅薄錛屾鏌ヨ祴鍊肩殑綾誨埆鏄惁姝g‘銆?BR>DynaProperty綾繪弿榪扮殑鏄疍ynaBean涓墍鍖呭惈鐨勫睘鎬х殑綾誨瀷銆侱ynaProperty綾繪湁涓変釜灞炴э細灞炴х殑鍚嶇О錛歯ame錛屽睘鎬х殑鍚嶇О錛泃ype錛屽睘鎬х殑綾誨埆錛沜ontentType錛屽鏋淒ynaProperty鎻忚堪鐨勬槸涓鍣ㄥ璞?List鎴栬匨ap)錛岄偅涔堣繖涓猚ontentType灝變唬琛ㄨ繖涓鍣ㄥ唴鍏冪礌鐨勭被鍒傝繖涓被鍊煎緱鍏蟲敞鐨勫湴鏂規槸writeObject鍜宺eadObject鏂規硶鐨勫疄鐜般傚畠浼氶鍏堝垽鏂嚜宸辯殑type鏄惁鏄竴涓猵rimitive鐨勭被錛屽鏋滄槸錛屽垯鍏堝啓鍏rue鏍囧織錛屽啀鍐欏叆瀵瑰簲鐨刾rimitive綾葷殑緙栧彿錛涘惁鍒欏啓鍏alse鏍囧織錛屽啀鍐欏叆type銆傚洜涓哄湪璋冪敤readObject鏂規硶鏃訛紝濡傛灉寰楀嚭鐨勬槸primitive綾誨瀷錛屽垯type鐨勫間負XXX.TYPE鑰屼笉鏄疿XX.class銆?BR>DynaClass 鏄竴涓帴鍙o紝鐢ㄦ潵綆$悊DynaBean涓墍鏈夌殑DynaProperty灞炴с?BR>
浜屻丅asiceDyanBean 涓?BasicDynaClass
BasiceDyanBean 瀹炵幇鑷狣ynaBean鎺ュ彛銆傚畠鍖呭惈涓涓疄鐜頒簡DynaClass鎺ュ彛鐨勭被鐨勫璞★紝鍜屼竴涓敤鏉ュ瓨鏀懼肩殑HashMap銆傝繖涓狧ashMap鐨刱ey涓嶥ynaClass涓璈ashMap鐨刱ey鏄竴涓瀵瑰簲鐨勩?BR>BasicDynaClass 瀹炵幇浜咲ynaClass鎺ュ彛錛屼互DynaProperty鐨刵ame涓簁ey淇濆瓨鎵鏈夎繖浜汥ynaProperty瀵硅薄銆傚畠閫氳繃newInstance鏂規硶鍔ㄦ佺敓鎴愬疄鐜頒簡DynaBean鎺ュ彛鐨勭被鐨勫璞★紱娉ㄦ剰榪欎釜綾繪槸鍙互鍔ㄦ佹寚瀹氱殑錛屽鏋滄病鏈夛紝閭d箞灝辨槸榛樿鐨凚asicDynaBean綾匯傚姩鎬佹寚瀹氱被鏄氳繃鍙嶅皠瀹炵幇鐨勶紝紼嬪簭濡備笅錛?BR>//dynaBeanClass涓轟換鎰忕殑瀹炵幇浜咲ynaBean鎺ュ彛鐨勭被錛宑onstructorTypes涓鴻繖涓?BR>//綾葷殑鏋勯犳柟娉曟墍闇瑕佺殑鍙傛暟鐨勭被鍨?BR>constructor = dynaBeanClass.getConstructor(constructorTypes);
//constructorValues涓烘瀯閫犳柟娉曠殑鍙傛暟鍊鹼紝瀹為檯涓婂畠鐨勫間負褰撳墠鐨凚asicDynaClass
return ((DynaBean) constructor.newInstance(constructorValues));

Commons-Beanutils錛堝洓錛?/B>

涓銆丆onvertUtils 鍜?ConvertUtilsBean
ConvertUtils 鏄疌onvertUtilsBean綾葷殑涓涓畝鍗曞皝瑁咃紝鍗矯onvertUtils涓殑鎵鏈夋柟娉曢兘鏄氳繃鐩存帴璋冪敤ConvertUtilsBean涓殑鍚屽悕鏂規硶瀹炵幇鐨勩傚鏋滀綘闇瑕佹洿澶嶆潅鐨勫姛鑳斤紝灝變嬌鐢–onvertUtilsBean錛屽惁鍒欎嬌鐢–onvertUtils銆?BR>ConvertUtilsBean 閫氳繃涓涓狧ashMap綆$悊鎵鏈夌殑XXXConverter銆傝繖涓狧ashMap鐨刱ey涓篨XX鐨勭被鍏ㄥ悕錛屽間負鐩稿簲鐨刋XXConverter瀵硅薄銆傞氳繃deregister()鏂規硶錛屽垵濮嬪寲榪欎釜HashMap銆傝繖涓垵濮嬪寲鏂規硶浼氫負姣忎竴涓猉XXConverter綾繪彁渚涗竴涓己鐪佺殑鍊箋傜敤鎴峰彲浠ュ姩榪噑etDefaultXXX(...)鏂規硶鏉ヨ嚜琛岃緗甔XXConverter瀵硅薄鐨勭己鐪佸箋傝繖涓被榪樻彁渚涗簡convert(...)鏂規硶錛屽String value榪涜鐩稿簲鐨勮漿鍖栥?BR>
浜屻丳ropertyUtils 鍜?PropertyUtilsBean
PropertyUtils 鏄疨ropertyUtilsBean綾葷殑涓涓畝鍗曞皝瑁咃紝鍚屾牱瀹冪殑鎵鏈夋柟娉曢兘鏄氳繃鐩存帴璋冪敤PropertyUtilsBean 涓悓鍚嶆柟娉曞疄鐜扮殑銆?BR>PropertyUtilsBean 瀵笵ynaBean鎴栬呬竴涓猨ava鏍囧噯Bean涓殑灞炴у姩鎬佺殑璧嬪煎拰鍙栧?闈為氳繃getXXX鍜宻etXXX鏂規硶)銆?BR>1銆佽繖涓被鏀寔澶氬眰宓屽錛屾瘮濡傦細XXX[i].YYY(key).ZZZ錛岄偅涔堝畠浼氫負浣犲緱鍒版垨鑰呰緗甖ZZ鐨勫睘鎬с?BR>2銆佹墍鏈夌殑set/get鏂規硶浠嬬粛錛?BR>//瀵筙XX(key)鏍煎紡鐨刵ame璁懼?BR>setMappedProperty(Object bean, String name,String key, Object value)
//瀵筙XX[i]鏍煎紡鐨刵ame璁懼?BR>setIndexedProperty(Object bean, String name, int index, Object value)
//瀵筙XX鏍煎紡鐨刵ame璁懼?BR>setSimpleProperty(Object bean, String name, Object value)
//瀵筙XX(key).YYY[i].ZZZ鏍煎紡鐨勫悕縐拌鍊箋傛敞鎰忥紝name蹇呴』瑕侀伒鐓ц繖縐嶆牸寮忋?BR>//榪欎釜鏂規硶瀹為檯鍋氱殑灝辨槸浠モ?鈥濅負鍒嗛殧絎︼紝閫愬眰鐨勬牴鎹儏鍐靛垎鍒皟鐢ㄤ笂闈㈢殑鍑犱釜鏂規硶錛?BR>//鑾峰彇鐩稿簲鐨刡ean銆?BR>setNestedProperty(Object bean, String name, Object value)
//瀹冪洿鎺ヨ皟鐢╯etNestedProperty鏂規硶
setProperty(Object bean, String name, Object value)
3銆乬etPropertyType(Object bean, String name)鏂規硶涓敤鏉ヨ幏鍙朆ean鐨勬煇涓涓猵roperty鐨勭被鍨嬬殑浠g爜錛?BR>PropertyDescriptor descriptor = getPropertyDescriptor(bean, name);
if (descriptor == null) {
return (null);
}else if (descriptor instanceof IndexedPropertyDescriptor) {
return (((IndexedPropertyDescriptor) descriptor).getIndexedPropertyType());
} else if (descriptor instanceof MappedPropertyDescriptor) {
return (((MappedPropertyDescriptor) descriptor).getMappedPropertyType());
} else {
return (descriptor.getPropertyType());
}
4銆乬etIndexedProperty(Object bean, String name, int index)
榪欎釜鏂規硶鐢ㄦ潵鑾峰彇涓涓暟緇勬垨鑰呬竴涓狶ist涓殑灞炴с傚畠浼氶鍏堢湅榪欎釜bean鏄惁鏄疍ynaBean綾誨瀷鐨勶紝濡傛灉鏄紝鍐嶅叾媯鏌ユ槸鍚︽湁name榪欎釜灞炴э紝濡傛灉鏈夐偅涔堝氨鐩存帴璋冪敤get(String name, int index)鏂規硶榪斿洖鍊鹼紱濡傛灉涓嶆槸DynaBean綾誨瀷錛岄偅涔堝氨浼氭墽琛屽涓嬫柟娉曪細
//鏈夋病鏈変負鏁扮粍鐨勬煇涓壒瀹氬厓绱犲彇鍊肩殑鏂規硶
if (descriptor instanceof IndexedPropertyDescriptor) {
Method readMethod = ((IndexedPropertyDescriptor) descriptor).
getIndexedReadMethod();
if (readMethod != null) {
Object subscript[] = new Object[1];
subscript[0] = new Integer(index);
return (invokeMethod(readMethod,bean, subscript));
}
}
// 濡傛灉娌℃湁錛屽氨鍏堝彇鍑烘暣涓璞?BR>Method readMethod = getReadMethod(descriptor);
if (readMethod == null) {
throw new NoSuchMethodException("Property '" + name +
"' has no getter method");
}
Object value = invokeMethod(readMethod, bean, new Object[0]);
//濡傛灉榪欎釜瀵硅薄瀹為檯涓婃槸涓涓狶ist錛岄偅涔堣皟鐢╣et()鏂規硶
if (!value.getClass().isArray()) {
if (!(value instanceof java.util.List)) {
throw new IllegalArgumentException("Property '" + name
+ "' is not indexed");
} else {
//get the List's value
return ((java.util.List) value).get(index);
}
//鍚﹀垯閫氳繃Array綾繪彁渚涚殑鐩稿簲鏂規硶鍙栧?BR>} else {
//get the array's value
return (Array.get(value, index));
}

涓夈丅eanUtil 鍜?BeanUtilBean
BeanUtils 鏄疊eanUtilsBean綾葷殑涓涓畝鍗曞皝瑁咃紝鍚屾牱瀹冪殑鎵鏈夋柟娉曢兘鏄氳繃鐩存帴璋冪敤BeanUtilsBean 涓悓鍚嶆柟娉曞疄鐜扮殑銆?BR>BeanUtilBean涓ぇ澶氭暟鏍稿績鏂規硶閮芥槸閫氳繃璋冪敤PropertyUtilsBean涓殑鏂規硶瀹炵幇鐨勩傝宲opulate(Object bean, Map properties)鏄嚜宸卞疄鐜扮殑錛屽洜涓鴻繖涓祴鍊艱繃紼嬭棣栧厛瀵箆alue榪涜鏍煎紡鐨勮漿鍖栵紱榪欎釜鏂規硶鎶妏roperties涓殑key涓哄睘鎬у悕錛寁alue涓哄睘鎬х殑鍊鹼紝鍒嗗埆瀵瑰簲鐨勮鍊肩粰bean瀵硅薄銆傚畠閫氳繃setProperty(Object bean, String name, Object value)鏂規硶瀹炵幇閫愪釜璁懼肩殑銆傜敱浜庢鏃剁殑value涓嶄竴瀹氱鍚坆ean涓璶ame灞炴х殑綾誨瀷錛屾墍浠ラ鍏堣鎶妚alue杞崲鎴愬悎閫傜殑鍊鹼紝鐒跺悗鍐嶈鍊箋傚叿浣撶殑綾誨瀷杞崲鏂規硶濡備笅錛?BR>
//榪欑綾誨瀷杞崲鐨勫師鍒欐槸錛氬鏋渧alue鏄疭tring鎴栬匰tring[]錛岄偅涔堣繖涓煎彲鑳戒負浠繪剰鐨勭被鍨嬶紝 
    //闇瑕佽繘琛岃漿鎹€傚鏋滀負鍏跺畠鐨勭被鍨嬶紝鍒欎笉榪涜浠諱綍杞崲銆?BR>    if (type.isArray() && (index < 0)) {
        // 濡傛灉鏄洿鎺ュ涓涓暟緇勮祴鍊鹼紝鍒欎嬌鐢╟onvert(String values[], Class clazz)鏂規硶杞崲
        if (value == null) {
            String values[] = new String[1];
            values[0] = (String) value;
            newValue = getConvertUtils().convert((String[]) values, type);
        } else if (value instanceof String) {
            String values[] = new String[1];
            values[0] = (String) value;
            newValue = getConvertUtils().convert((String[]) values, type);
        } else if (value instanceof String[]) {
            newValue = getConvertUtils().convert((String[]) value, type);
        } else {
            newValue = value;
        }
    } else if (type.isArray()) {
        // 濡傛灉鏄鏁扮粍鐨勬煇涓涓厓绱犺祴鍊鹼紝鍒欎嬌鐢╟onvert(String value, Class clazz)鏂規硶杞崲
        if (value instanceof String) {
            newValue = getConvertUtils().convert((String) value, type.getComponentType());
        } else if (value instanceof String[]) {   
            newValue = getConvertUtils().convert(((String[]) value)[0],type.getComponentType());
        } else {
            newValue = value;     
        }
    } else {                 
        // 鍚﹀垯灝辨槸涓瀵逛竴鐨勭畝鍗曡祴鍊鹼紝鍒欎嬌鐢╟onvert(String value, Class clazz)鏂規硶杞崲
        if ((value instanceof String) || (value == null)) {
            newValue = getConvertUtils().convert((String) value, type);
        } else if (value instanceof String[]) {
            newValue = getConvertUtils().convert(((String[]) value)[0], type);       
        } else if (getConvertUtils().lookup(value.getClass()) != null) {
            newValue = getConvertUtils().convert(value.toString(), type);
        } else {
            newValue = value;        }
    }


]]>
主站蜘蛛池模板: 亚洲综合久久精品无码色欲| 精品日韩亚洲AV无码一区二区三区| 亚洲一区二区三区播放在线| 最新黄色免费网站| 亚洲第一二三四区| 日本zzzzwww大片免费| 亚洲一卡2卡3卡4卡国产网站| 国产四虎免费精品视频| 亚洲成年人电影在线观看| 69式国产真人免费视频| www.亚洲成在线| 国产精品免费_区二区三区观看 | 亚洲国产高清人在线| 国产99视频精品免费专区| 在线观看亚洲人成网站| 免费A级毛片无码无遮挡内射| 国产精品亚洲专区在线观看| 日本高清免费不卡在线| jizz在线免费播放| 亚洲αv久久久噜噜噜噜噜| 久久午夜伦鲁片免费无码| 亚洲一区二区三区91| 免费在线精品视频| 久久九九AV免费精品| 亚洲人成毛片线播放| 四虎影视永久免费观看网址| 久久精品无码专区免费| 中文字幕亚洲免费无线观看日本| 国产精品69白浆在线观看免费| 亚洲AV无码AV日韩AV网站| 久久精品国产亚洲网站| 99国产精品永久免费视频| 国产成人不卡亚洲精品91| 久久精品亚洲日本佐佐木明希| 最近免费中文字幕4| 二区久久国产乱子伦免费精品| 亚洲另类视频在线观看| 在线亚洲午夜理论AV大片| 无码国产精品一区二区免费式直播 | 亚洲一级免费视频| 亚洲日韩国产一区二区三区|