天天看点

Struts2标签库和OGNL 学习内容

瀛︿範鍐呭

聽Struts 2鏍囩搴?

聽OGNL

鑳藉姏鐩爣

聽鐔熺粌浣跨敤Struts 2甯哥敤鏍囩

聽鐔熺粌浣跨敤OGNL

鏈珷绠€浠?

鍓嶉潰鎴戜滑缂栧啓鐨勬渚嬩娇鐢ㄧ殑閮芥槸HTML鏍囩锛岃繖浜涙爣绛惧苟涓嶈兘寰堝ソ鐨勪笌Struts 2妗嗘灦缁撳悎锛孲truts 2鍜孲truts 1涓€鏍烽兘鑷甫浜嗗姛鑳藉己澶с€佹垚鐔熷畬鍠勭殑鏍囩搴撲緵鎴戜滑浣跨敤锛岄€氳繃浣跨敤杩欎簺鏍囩搴撳彲浠ュぇ澶ф彁楂樺紑鍙戞晥鐜囧拰浠g爜鐨勫彲缁存姢鎬с€?

鍏跺疄Struts 2鐨勬爣绛惧簱鏄缓绔嬪湪OGNL鍩虹涓婄殑锛孫GNL鏄竴绉嶅姛鑳藉己澶х殑琛ㄨ揪寮忚瑷€锛岄€氳繃绠€鍗曠殑璇硶鍗冲彲瀛樺彇瀵硅薄鐨勫睘鎬с€佽皟鐢ㄥ璞$殑鏂规硶銆侀亶鍘嗙瓑鍔熻兘銆?

鏈珷灏嗗涔燨GNL鍜孲truts 2鏍囩搴擄紝鍖呮嫭鏁版嵁璁块棶鏍囩銆佹帶鍒舵爣绛?

鏍稿績鎶€鑳介儴鍒?

6.1聽OGNL

6.1.1聽ActionContext

Struts 2涓殑ActionContext銆乂alueStack鍜孲tackContext瀵硅薄涓嶰GNL瀵嗗垏鐩稿叧锛岀悊瑙h繖涓変釜瀵硅薄鏃跺涔燨GNL鐨勫墠鎻愩€?

鍦ㄥ墠闈㈢殑瀛︿範涓紝鎴戜滑宸茬粡鍦ㄤ娇鐢ˋctionContext銆乂alueStack鍜孲tackContext瀵硅薄浜嗭紝杩欎笁涓璞$殑浣滅敤鍙婂叾涔嬮棿鐨勫叧绯诲鍥?.1.1鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.1 ActionContext

1.聽ActionContext瀵硅薄

ActionContext锛坈om.opensymphony.xwork.ActionContext锛夋槸Action鎵ц鏃剁殑涓婁笅鏂囥€傛垜浠彲浠ユ妸涓婁笅鏂囩湅浣滄槸涓€涓鍣紝鐢ㄤ簬瀛樻斁Action鎵ц鏃堕渶瑕佷娇鐢ㄧ殑瀵硅薄淇℃伅锛屼緥濡傝姹傜殑鍙傛暟(Parameter)銆佷細璇濓紙Session锛夈€丼ervlet涓婁笅鏂囷紙ServletContext锛夌瓑銆傚湪姣忔璇锋眰鎵цAction涔嬪墠閮戒細鍒涘缓鏂扮殑ActionContext銆備繚瀛樺埌ActionContext瀵硅薄涓殑鏁版嵁鍙互閫氳繃Struts2鏍囩鍜孫GNL琛ㄨ揪寮忚瑷€杩涜璁块棶銆?

2.聽StackContext瀵硅薄

StackContext瀵硅薄鏄疉ctionContext涓婁笅鏂囦腑鐨勪竴涓被鍨嬩负java.utiI.Stack鐨勫疄渚嬨€備笂闈㈡彁鍒扮殑璇锋眰鍙傛暟锛圥arameter锛夈€佷細璇濓紙Session锛夈€丼ervlet涓婁笅鏂囷紙ServletContext锛夌瓑瀵硅薄锛屽疄闄呬笂閮藉瓨鍌ㄥ湪ActionContext涓婁笅鏂囦腑鐨凷tackContext瀵硅薄涓€?

3.聽ValueStack瀵硅薄

Struts2浼氫负姣忎竴娆ction鐨勮姹傚垱寤轰笌涔嬪搴旂殑ValueStack锛屽苟灏嗘墍鏈堿ction灞炴€ф暟鎹瓨鍌ㄥ埌ValueStack涓紝鍐嶅皢ValueStack聽鏆撮湶缁欒鍥鹃〉闈紝杩欐牱椤甸潰灏卞彲浠ョ洿鎺ヨ闂瓵ction涓殑灞炴€у€笺€?

6.1.2聽浣跨敤OGNL

OGNL鍗筹紙Object-Graph Navigation Language锛夛紝鏄璞″浘瀵艰埅璇█鐨勭缉鍐欙紝瀹冩槸涓€涓紑婧愰」鐩紝宸ヤ綔鍦ㄨ鍥惧眰锛岀敤鏉ュ彇浠i〉闈腑鐨凧ava鑴氭湰锛岀畝鍖栨暟鎹闂搷浣溿€?

OGNL鏄竴绉嶆瘮EL鍔熻兘鏇村己澶х殑琛ㄨ揪寮忚瑷€銆傞€氳繃鍏剁畝鍗曚竴鑷寸殑琛ㄨ揪寮忚娉曪紝鍙互瀛樺彇瀵硅薄鐨勫睘鎬с€佽皟鐢ㄥ璞$殑鏂规硶銆侀亶鍘嗕互鍙婅繘琛岀被鍨嬭浆鎹㈢瓑鍔熻兘銆係truts 2妗嗘灦榛樿浣跨敤OGNL浣滀负琛ㄨ揪寮忚瑷€銆?

1.聽璁块棶涓婁笅鏂囦腑鐨勬暟鎹?

ActionContext鏄疭truts聽2涓璒GNL鐨勪笂涓嬫枃鐜锛屽嵆ActionContext涓殑鏁版嵁锛堝疄闄呭瓨鍌ㄥ湪StackContext涓級閮藉彲浠ラ€氳繃OGNL鏉ヨ闂€傝€孉ctionContext鍙堝寘鎷琑equest銆丼ession銆乂alueStack绛夊璞★紝鎵€浠ラ€氳繃OGNL涔熷彲浠ヨ闂瓨鍌ㄥ湪杩欎簺瀵硅薄涓殑鏁版嵁銆?

ValueStack鏄疧GNL鐨勬牴锛屽悓鏃剁敱浜嶰GNL涓婁笅鏂囦腑鐨勬牴瀵硅薄鍙互鐩存帴璁块棶锛屾墍浠ラ€氳繃OGNL璁块棶ValueStack涓殑鏁版嵁鏃讹紝涓嶉渶瑕佷娇鐢ㄤ换浣曠壒娈婄殑鏍囪锛岃€岃闂瓵ctionConext涓殑鍏朵粬瀵硅薄鏃跺垯闇€瑕佷娇鐢ㄢ€?鈥濇爣璁般€係truts聽2涓彁渚涗簡<s:property>鏍囩鏉ユ樉绀篛GNL涓婁笅鏂囦腑鐨勬暟鎹紝鍦ㄥ疄闄呭簲鐢ㄤ腑閫氬父鍒嗕负浠ヤ笅鍥涚鎯呭喌锛?

锛?锛?lt;s:property聽聽value=鈥漸id鈥濓紡>锛毬燬truts2浼氬湪ValueStack涓煡鎵惧悕涓簎id鐨勯」锛屽苟杈撳嚭鍏跺€笺€?

锛?锛?lt;s:property 聽value=鈥?uid鈥濓紡>锛毬燬truts2浼氬湪StackContext涓煡鎵惧悕涓簎id鐨勯」锛屽苟杈撳嚭鍏跺€笺€?

锛?锛?lt;s:property 聽value=鈥?session.uid鈥濓紡>锛毬燬truts2浼氬湪StackContcxt涓殑Session浣滅敤鍩熶腑鏌ユ壘鍚嶄负uid鐨勯」锛屽苟杈撳嚭鍏跺€笺€傝繖閲岀殑session涔熷彲浠ユ洿鎹负request鍜宎pplication锛屼互渚垮湪Request鍜孉pplication浣滅敤鍩熶腑鏌ユ壘鎸囧畾鐨勯」銆?

锛?锛壜?lt;s:property 聽value =鈥?attr.uid鈥?>锛毬燬truts2浼氫緷娆″湪StackContext鐨凱age銆丷equest銆丼ession銆丄pplication浣滅敤鍩熷唴鏌ユ壘瀵瑰簲鐨剈id涓殑鍊笺€?

2.聽璁块棶JavaBean灞炴€?

閫氳繃OGNL鍙互闈炲父鏂逛究鐨勮闂甁avaBean锛屽亣璁剧幇鍦╒alueStack涓瓨鍦⊿tudentAction锛岃Action鐨勫睘鎬ф湁name銆乤ge绛夈€?

(1) <s:property value=鈥漬ame鈥濓紡>锛歋truts2浼氭墽琛孲tudentAction瀵硅薄鐨刧etName()鏂规硶鏉ヨ幏寰楀苟杈撳嚭name灞炴€х殑鍊?

(2) <s:property value=鈥漚ge鈥濓紡>锛歋truts2浼氭墽琛孲tudentAction瀵硅薄鐨刧etAge()鏂规硶鏉ヨ幏寰楀苟杈撳嚭age灞炴€х殑鍊?

鐢变簬ValueStack鏄疧GNL鐨勬牴锛屾墍浠ユ鏃跺湪浣跨敤<s:property>鏍囩鏃舵棤闇€鈥?鈥濇爣璁般€?

3. 聽鎵цJavaBean鏂规硶

OGNL涓嶄粎鍙互鑷姩鎵цgetter鏂规硶锛岃€屼笖鑳藉鎵цJavaBean鐨勫叾浠栨柟娉曘€傛洿閲嶈鐨勬槸锛岃繕鑳藉鍦ㄦ墽琛屾柟娉曠殑鏃跺€欎紶鍏ュ弬鏁帮紝OGNL鎵ц鐨勬柟娉曞彲浠ユ槸闈欐€佹柟娉曞拰闈為潤鎬佹柟娉曘€傛墽琛岄潤鎬佹柟娉曠殑鏍煎紡涓猴細@绫荤殑鍏ㄧ被鍚岪鏂规硶鍚嶏紙鍙傛暟锛夈€備负浜嗚兘澶熻OGNL鎵ц闈欐€佹柟娉曪紝杩樺繀椤诲湪struts.xml閰嶇疆鏂囦欢涓厤缃父閲忓弬鏁帮紝鎵嶅彲浠ュ紑鍚疧GNL璋冪敤闈欐€佹柟娉曠殑鍔熻兘锛岄厤缃唬鐮佸涓嬶細

<constantname="struts.ognl.allowStaticMethodAccess" value="true" />

绀轰緥6.1婕旂ず浜嗕娇鐢∣GNL鎵цJavaBean鏂规硶銆?

绀轰緥6.1

(1)鍒涘缓JavaBean聽锛屽懡鍚嶄负鈥淥gnlInfo.java鈥濄€?

[java]聽 view plain 聽copy

  1. public聽class聽OgnlInfo聽{聽聽聽
  2. //瀹氫箟闈欐€佹柟娉暵犅?
  3. public聽static聽String聽sayBye(String聽name)聽聽
  4. {聽聽
  5. return聽name聽+聽"鍐嶈!";聽聽
  6. }聽聽
  7. //瀹氫箟闈為潤鎬佹柟娉暵犅?
  8. public聽String聽sayHello(String聽name)聽聽
  9. {聽聽
  10. return聽name聽+聽"浣犲ソ!";聽聽
  11. }聽聽
  12. }聽聽

(2)鍒涘缓index.jsp銆?

[html]聽 view plain 聽copy

  1. <body>聽聽
  2. 聽聽聽聽<%聽聽
  3. 聽聽聽聽聽聽聽聽//瀹炰緥鍖杘gnl瀵硅薄聽聽
  4. 聽聽聽聽聽聽聽聽OgnlInfo聽ognlInfo聽=聽new聽OgnlInfo();聽聽
  5. 聽聽聽聽聽聽聽聽//灏唎gnlinfo瀵硅薄瀛樺叆request浣滅敤鍩熷唴聽聽
  6. 聽聽聽聽聽聽聽聽request.setAttribute("ognlInfo",ognlInfo);聽聽聽聽
  7. 聽聽聽聽聽聽
  8. 聽聽聽聽聽聽
  9. 聽聽聽聽%>聽聽
  10. 聽聽聽聽<!--聽鎵цognl瀵硅薄闈為潤鎬佹柟娉暵?->聽聽
  11. 聽聽聽聽<s:property聽value="#request.ognlInfo.sayHello('jack')"/>聽聽
  12. 聽聽聽聽<!--聽鎵цognl瀵硅薄闈欐€佹柟娉暵?->聽聽
  13. 聽聽聽聽<s:property聽value="@[email聽protected]('tom')"/>聽聽
  14. 聽聽聽
  15. 聽聽</body>聽聽

4. 聽聽OGNL鎿嶄綔绗?

OGNL琛ㄨ揪寮忎腑鑳戒娇鐢ㄧ殑鎿嶄綔绗﹀熀鏈笌Java涓殑鎿嶄綔绗︾浉鍚岋紝闄や簡鑳戒娇鐢?銆佲€斻€?銆?銆?=銆?=銆?绛夋搷浣滅涔嬪锛岃繕鑳戒娇鐢╩od锛堝彇浣欙級銆乮n銆乶ot in绛夋搷浣滅銆?

5. 鈥?鈥濆彿

鈥?鈥濆彿鐢ㄤ簬瀵瑰睘鎬т负瀛楃涓茬被鍨嬬殑OGNL琛ㄨ揪寮忕殑鍊艰繘琛岃绠楋紝鈥?鈥濈鍙峰湪OGNL涓殑浣跨敤鏂规硶濡備笅锛?

<body>

<%

String value="纭畾";

pageContext.setAttribute("val", value);

%>

涓嶄娇鐢?绗﹀彿锛屼細鎸夊師鏍锋樉绀?lt;br>

<s:submit value="#attr.val"/>

<br>

浣跨敤%绗﹀彿锛屼細璁$畻OGNL琛ㄨ揪寮忕殑鍊?lt;br>

<s:submit value="%{#attr.val}"/>

</body>

杩愯缁撴灉濡傚浘6.1.2鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.2 %鐨勪娇鐢?

6. OGNL鐨勯泦鍚堟搷浣?

锛?锛夌敓鎴怢ist绫诲瀷鐨勯泦鍚堛€傚叿浣撹娉曚负{e1,e2,e3,...}銆傛璇硶灏嗙洿鎺ョ敓鎴愪竴涓猯ist绫诲瀷闆嗗悎锛岃闆嗗悎鍖呭惈3涓厓绱狅細e1,e2,e3銆傚鏋滈渶瑕佹洿澶氱殑鍏冪礌锛屽垯澶氫釜鍏冪礌涔嬮棿浠ヨ嫳鏂囬€楀彿闅斿紑銆?

锛?锛夌敓鎴怣ap绫诲瀷鐨勯泦鍚堛€傚叿浣撹娉曚负#{key1,key2,key3...}銆傛璇硶灏嗙洿鎺ョ敓鎴愪竴涓狹ap绫诲瀷闆嗗悎锛岃Map涓瘡涓猭ey-value瀵硅薄涔嬮棿浠ヨ嫳鏂囧啋鍙烽殧寮€锛屽鏋滈渶瑕佹洿澶氱殑鍏冪礌锛屽垯澶氫釜鍏冪礌涔嬮棿浠ヨ嫳鏂囬€楀彿闅斿紑銆?

锛?锛変娇鐢╥n鍜宯ot in聽杩愮畻绗︺€傚浜庨泦鍚堬紝OGNL鎻愪緵鍏冪礌绗n涓巒ot in銆傚叾涓紝in鐢ㄤ簬鍒ゆ柇鏌愪釜鍏冪礌鏄惁鍦ㄦ寚瀹氶泦鍚堝唴锛沶ot in聽鍒欑敤浜庡垽鏂煇涓厓绱犳槸鍚︿笉鍦ㄦ寚瀹氱殑闆嗗悎涓€侷n鍜屄爊ot in聽鐨勭敤娉曞涓嬶細

<!--聽鍒ゆ柇java鏄惁鍦ㄦ寚瀹氶泦鍚堜腑-->

<s:if test="'java' in {'java','jsp','html'}">

瀛樺湪

<s:else>

涓嶅瓨鍦?

</s:else>

</s:if>

(4) 聽聽鑾峰彇闆嗗悎鐨勫瓙闆嗐€侽GNL鍏佽閫氳繃鏌愪釜瑙勫垯鍙栧緱闆嗗悎鐨勫瓙闆嗭紝鍙栧緱瀛愰泦鏃舵湁浠ヤ笅涓夌鎿嶄綔绗︼細

1锛夆€?鈥濇搷浣滅锛氬彇鍑烘墍鏈夌鍚堥€夋嫨閫昏緫鐨勫厓绱犮€?

2锛夆€淾鈥濇搷浣滅锛氬彇鍑虹鍚堥€夋嫨閫昏緫鐨勭涓€涓厓绱犮€?

3锛夆€?鈥濇搷浣滅锛氬彇鍑虹鍚堥€夋嫨閫昏緫鐨勬渶鍚庝竴涓厓绱犮€?

鍋囪鐜板湪Session涓瓨鍦ㄥ悕涓篠tudentList鐨勯泦鍚堬紝璇ラ泦鍚堝瓨鍌ㄤ簡澶氫釜Student瀵硅薄銆係tudent绫讳腑瀛樺湪涓€涓猘ge灞炴€э紝杩欎笁绉嶆搷浣滅殑璇硶濡備笅锛?

#session.StudentList.{?#this.age>20}鐢ㄤ簬鍙栧嚭骞撮緞澶т簬20鐨勫瓙闆嗗悎銆?

#session.StudentList.{^#this.age>20}鐢ㄤ簬鍙栧嚭绗竴涓勾榫勫ぇ浜?0鐨凷tudent瀵硅薄銆?

#session.StudentList.{$#this.age>20}鐢ㄤ簬鍙栧嚭鏈€鍚庝竴涓勾榫勫ぇ浜?0鐨凷tudent瀵硅薄銆?

6.2聽Struts 2鐨勬爣绛惧簱

Struts 2浣滀负涓€涓紭绉€鐨凪VC妗嗘灦锛屽畠涓哄紑鍙戜汉鍛樻彁渚涗簡涓€涓姛鑳藉己澶с€佹敮鎸佸箍娉涖€侀珮鎵╁睍鎬х殑鏍囩搴擄紝瀹屽叏鑳芥弧瓒砏eb椤甸潰澶嶆潅銆佸鍙樼殑闇€姹傘€?

Struts 2鐨勬爣绛惧簱澶уぇ绠€鍖栦簡瑙嗗浘椤甸潰鐨勪唬鐮佺紪杈戝伐浣滐紝鎻愰珮浜嗚鍥鹃〉闈㈢殑缁存姢鏁堢巼銆備笌Struts 1鐨勬爣绛惧簱鐩告瘮锛孲truts 2鐨勬爣绛惧簱涓嶄絾鍔熻兘寮哄ぇ锛岃€屼笖鏇村姞绠€鍗曟槗鐢ㄣ€?

鍦⊿truts 1鐨勬爣绛惧簱涓紝瀹冨垎鍒彁渚涗簡html銆乥ean銆乴ogic绛夊嚑涓爣绛惧簱銆係truts 2鏍囩搴撳苟娌℃湁涓ユ牸鐨勫鏍囩杩涜鍒嗙被锛岃€屾槸鎶婃墍鏈夋爣绛炬暣鍚堝埌浜嗕竴涓爣绛惧簱涓€備负浜嗕娇鍒濆鑰呭Struts 2鏍囩搴撹兘鏈夋洿鍔犳竻鏅扮殑璁よ瘑锛屾垜浠彲浠ュ皢Struts 2鐨勬爣绛惧簱鍒嗘垚涓夊ぇ绫伙紙濡傚浘6.1.3鎵€绀猴級锛?

聽UI鏍囩锛氫富瑕佺敤浜庣敓鎴怘TML椤甸潰鍏冪礌銆?

聽闈濽I鏍囩锛氫富瑕佺敤浜庨€昏緫鎺у埗銆佹暟鎹闂瓑鎿嶄綔銆?

聽Ajax鏍囩锛氫富瑕佺敤浜庢敮鎸丄jax璁块棶銆?

鍏朵腑鍙堝彲浠ユ妸UI鏍囩鍒嗕负濡備笅涓ょ被锛?

琛ㄥ崟鏍囩锛氫富瑕佺敤浜庣敓鎴怘TML涓殑琛ㄥ崟鍏冪礌銆?

聽闈炶〃鍗曟爣绛撅細涓昏鍖呭惈涓€浜涘父鐢ㄧ殑鍔熻兘鏍囩锛屼緥濡傛樉绀烘棩鏈熸垨鏍戝舰鑿滃崟銆?

瀵逛簬闈濽I鏍囩锛屼篃鍙互鍐嶇粏鍒嗕负濡備笅涓ょ被锛?

聽鏁版嵁璁块棶鏍囩锛氫富瑕佺敤浜庤幏寰楁垨杈撳嚭ValueStack涓殑鍊笺€?

聽閫昏緫鎺у埗鏍囩锛氫富瑕佺敤浜庢暟鎹闂腑鐨勬潯浠跺垎鏀€佸惊鐜瓑娴佺▼鎺у埗銆?

Struts2标签库和OGNL 学习内容

鍥?.1.3 鏍囩搴撳垎绫?

浣跨敤Struts2鏍囩搴撲箣鍓嶏紝涔熼渶瑕佸湪JSP椤甸潰涓鍏ャ€傜幇鍦ㄧ殑Web搴旂敤涓€鑸兘浣跨敤Servlet 2.4浠ヤ笂鐨勮鑼冿紝鍥犳鎴戜滑灏辨棤椤诲湪web.xml鏂囦欢涓鏍囩搴撹繘琛岄厤缃紝鍥犱负Servlet 2.4浠ヤ笂鐨勮鑼冨彲浠ョ洿鎺ヨ鍙栨爣绛惧簱瀹氫箟鏂囦欢锛圱LD鏂囦欢锛夛紝鍦↗SP椤甸潰涓洿鎺ラ€氳繃涓嬮潰涓€琛屼唬鐮佸氨鍙互瀵煎叆Struts 2鏍囩搴撱€?

<%@ taglib prefix="s" uri="/struts-tags" %>

6.2.1聽鏁版嵁璁块棶鏍囩

鏁版嵁璁块棶鏍囩涓昏鐢ㄦ潵鑾峰緱鎴栬緭鍑哄悇绉嶆暟鎹殑鍔熻兘锛屽父搴旂敤浜庢樉绀篈ction涓殑灞炴€т互鍙婂浗闄呭寲杈撳嚭绛夊満鍚堛€傚父瑙佺殑鏁版嵁鏍囩涓昏鍖呭惈浠ヤ笅鍑犱釜锛?

聽action鏍囩锛氳鏍囩鐢ㄤ簬鍦↗SP椤甸潰涓洿鎺ヨ皟鐢ㄤ竴涓狝ction聽銆?

include鏍囩锛氳鏍囩鐢ㄤ簬鍦↗SP椤甸潰涓寘鍚叾浠栭〉闈㈣祫婧愩€?

聽param鏍囩锛氳鏍囩鐢ㄤ簬璁剧疆涓€涓弬鏁帮紝閫氬父鐢ㄤ綔bean銆乽rl鏍囩鐨勫瓙鏍囩銆?

聽property鏍囩锛氳鏍囩鐢ㄤ簬杈撳嚭鏌愪釜鍊笺€?

聽set鏍囩锛氳鏍囩鐢ㄤ簬璁剧疆涓€涓柊鍙橀噺銆?

聽text鏍囩锛氳鏍囩鐢ㄤ簬杈撳嚭鍥介檯鍖栨秷鎭€?

聽url鏍囩锛氳鏍囩鐢ㄤ簬鐢熸垚涓€涓猆RL鍦板潃銆?

聽date鏍囩锛氳鏍囩鐢ㄤ簬鏍煎紡鍖栬緭鍑轰竴涓棩鏈熴€?

1.聽action鏍囩

璇ユ爣绛惧彲浠ュ湪JSP椤甸潰涓洿鎺ヨ皟鐢ˋction锛屽苟鍙互鎶婃墽琛岀殑缁撴灉鍖呭惈鍦ㄦ爣绛剧殑浣嶇疆锛岃繖鏃堕渶瑕佹寚瀹欰ction鐨刵ame鍜宯amespace绛夊睘鎬с€備笅闈㈡槸璇ユ爣绛剧殑鍑犱釜涓昏灞炴€э細

聽id灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳璋冪敤鐨凙ction鐨勫紩鐢↖D銆?

聽name灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳璋冪敤鐨凙ction鐨勫悕瀛椼€?

聽namespace灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳璋冪敤鐨凙ction鎵€鍦ㄧ殑namespace銆?

聽executeResult灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氭槸鍚﹀皢Action鐨勫鐞嗙粨鏋滃寘鍚埌褰撳墠椤甸潰涓紝璇?

灞炴€х殑榛樿鍊兼槸false锛屽嵆涓嶅寘鍚€?

绀轰緥6.2

涓嬮潰鎴戜滑閫氳繃涓€涓疄渚嬫潵浠嬬粛action鏍囩鐨勫叿浣撳簲鐢紝棣栧厛缂栧啓涓€涓畝鍗曠殑Action绫伙紝浠g爜濡備笅鎵€绀恒€?

public class TagAction

{

private String name;

//鐪佺暐getter鍜宻etter鏂规硶

public String exec()

{

return "ok";

}

}

閫氳繃涓婅堪浠g爜鍙互鐪嬪埌璇ction鍙寘鍚簡涓€涓猠xec涓氬姟鏂规硶銆備笅闈㈡槸璇ction鍦╯truts.xml鏂囦欢涓殑閰嶇疆锛?

[html]聽 view plain 聽copy

  1. <struts>聽聽
  2. 聽聽聽聽<package聽name="struts2_Tags"聽extends="struts-default"聽聽
  3. 聽聽聽聽聽namespace="/tags">聽聽聽聽聽聽聽聽
  4. <action聽name="tag1"聽class="com.zy.TagAction"聽method="exec">聽聽
  5. <result聽name="ok">succ.jsp</result>聽聽
  6. </action>聽聽
  7. 聽聽聽聽</package>聽聽
  8. </struts>聽聽

涓嬮潰鏄痵ucc.jsp瑙嗗浘鏂囦欢鐨勪唬鐮侊細

<body>

<br>

璋冪敤Action!!

</body>

涓嬮潰鏄娇鐢╝ction鏍囩鐨剆-action_Tag.jsp鏂囦欢锛屼唬鐮佸涓嬫墍绀猴細

<body>

涓嬮潰璋冪敤Action锛屽苟灏嗙粨鏋滃寘鍚埌鏈〉闈腑銆?lt;br>

<s:action name="tag1" executeResult="true" namespace="/tags"/>

</body>

涓婅堪浠g爜浣跨敤<s:action />鏍囩璋冪敤浜嗗悕瀛椾负tag1鐨勯€昏緫action锛屽苟閫氳繃璁剧疆executeResult灞炴€т负true灏嗙粨鏋滃寘鍚埌浜嗘湰椤甸潰涓€?

Struts2标签库和OGNL 学习内容

鍥?.1.4 聽action鏍囩鐨勫簲鐢?

2.聽property鏍囩

璇ユ爣绛剧殑浣滅敤灏辨槸杈撳嚭ActionContext涓璞$殑鍊兼垨鑰匒ction銆丣avaBean鐨勫睘鎬у€硷紝閫氬父缁撳悎OGNL浣跨敤銆傝鏍囩鏈夊涓嬪嚑涓睘鎬э細

脴聽value锛岃灞炴€х敤鏉ユ寚瀹氳杈撳嚭鐨勫睘鎬ф垨OGNL琛ㄨ揪寮忋€?

脴聽default锛岃灞炴€х敤鏉ユ寚瀹氬綋value鎸囧畾鐨勫睘鎬у€间负null鏃惰緭鍑虹殑鍊笺€?

脴聽escape锛岃灞炴€х敤鏉ユ寚瀹氭槸鍚︾敓鎴怘TML浠g爜锛岄粯璁や负true锛岃〃绀哄湪娴忚鍣ㄤ笂杈撳嚭琛ㄨ揪寮忕殑鍊硷紱濡傛灉涓篺alse锛屽垯鎶婅〃杈惧紡鐨勫€间綔涓篐TML浠g爜宓屽叆銆?

绀轰緥6.3

涓嬮潰鏄簲鐢╬roperty鏍囩鐨勭畝鍗曠ず渚嬨€?

<body>

聽聽聽聽<%

聽聽聽聽 String url="<a href='index.jsp'>瓒呴摼鎺?lt;/a>";

聽聽聽聽 pageContext.setAttribute("su",url);

聽聽聽聽聽%>

聽聽聽聽聽<s:property value="#attr.su"/><hr>

聽聽聽聽聽<s:property value="#attr.su" escape="false"/><hr>

聽聽聽聽聽<s:property value="#attr.uid" default="鎵句笉鍒皍id"/>

</body>

杩愯鏁堟灉濡傚浘6.1.5鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.5 property鏍囩

3.聽include鏍囩

璇ユ爣绛剧敤鏉ュ皢涓€涓狫SP鎴朣ervlet绛夎祫婧愬寘鍚埌褰撳墠椤甸潰涓紝浣跨敤璧锋潵闈炲父绠€鍗曘€傝鏍囩涓昏鍖呭惈value灞炴€э紝鐢ㄦ潵鎸囧畾琚寘鍚殑JSP鎴朣ervlet绛夎祫婧愭枃浠躲€?

绀轰緥6.4

鎺ヤ笅鏉ラ€氳繃涓€涓畝鍗曠殑渚嬪瓙鏉ヤ粙缁峣nclude鏍囩鐨勫叿浣撳簲鐢紝棣栧厛鏄鍖呭惈鐨刬nclude-file.jsp椤甸潰鐨勪唬鐮侊細

[html]聽 view plain 聽copy

  1. <%@聽page聽contentType="text/html;聽charset=GBK"聽language="java"%>聽聽
  2. <%@taglib聽prefix="s"聽uri="/struts-tags"%>聽聽
  3. <html>聽聽
  4. <head>聽聽
  5. </head>聽聽
  6. <body>聽聽
  7. ---------------------------聽聽
  8. <h3>杩欐槸琚寘鍚殑椤甸潰</h3>聽聽
  9. </body>聽聽
  10. </html>聽聽
  11. 涓嬮潰鏄寘鍚玦nclude-file.jsp杩欎釜椤甸潰鐨剆-include_Tag.jsp鏂囦欢锛屼唬鐮佸涓嬫墍绀猴細聽聽
  12. <%@聽page聽contentType="text/html;聽charset=utf-8"聽language="java"%>聽聽
  13. <%@taglib聽prefix="s"聽uri="/struts-tags"%>聽聽
  14. <html>聽聽
  15. <head>聽聽
  16. <title>浣跨敤include鏍囩鏉ュ寘鍚洰鏍囬〉闈?lt;/title>聽聽
  17. </head>聽聽
  18. <body>聽聽
  19. <h2>浣跨敤include鏍囩鏉ュ寘鍚洰鏍囬〉闈?lt;/h2>聽聽
  20. <s:include聽value="include-file.jsp"/>聽聽
  21. </body>聽聽
  22. </html>聽聽

涓婅堪浠g爜閫氳繃浣跨敤include鏍囩鍖呭惈浜唅nclude-file.jsp椤甸潰锛岃繍琛屾晥鏋滃鍥?.1.6鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.6 include鏍囩

4.聽set鏍囩

璇ユ爣绛剧敤鏉ュ畾涔変竴涓彉閲忥紝骞舵妸杩欎釜鍙橀噺鏀惧埌鎸囧畾鐨勮寖鍥村唴锛屼緥濡俛pplication鑼冨洿銆乻ession鑼冨洿绛夈€傝鏍囩鏈変互涓嬩竴浜涘父鐢ㄥ睘鎬э細

脴聽id灞炴€э細璇ュ睘鎬х敤鏉ュ畾涔夊彉閲忕殑鍚嶅瓧銆?

脴聽scope灞炴€э細璇ュ睘鎬х敤鏉ュ畾涔夊彉閲忚鏀剧疆鐨勮寖鍥达紝鍙€夌殑鍊兼湁application銆乻ession銆乺equest銆乺esponse銆乸age鍜孲tackContext銆?

脴聽value灞炴€э細璇ュ睘鎬х敤鏉ュ畾涔夊皢瑕佽祴缁欏彉閲忕殑鍥哄畾鍊兼垨鑰呭彟涓€涓凡缁忓畾涔夌殑鍙橀噺銆?

绀轰緥6.5

涓嬮潰鎴戜滑閫氳繃涓€涓ず渚嬫潵浠嬬粛set鏍囩鐨勫叿浣撳簲鐢紝棣栧厛鎴戜滑瀹氫箟涓€涓彉閲弍锛屽苟鎶娾€滃皬鏍峰効鈥濊繖涓瓧绗︿覆璧嬪€肩粰瀹冿紝鐒跺悗瀹氫箟鍙︿竴涓彉閲弖ser锛屽苟鎶妏璧嬪€肩粰user銆備唬鐮佸涓嬫墍绀猴細

<body>

<h2>浣跨敤set鏍囩璁剧疆涓€涓柊鍙橀噺</h2>

<s:set id="p" value="'灏忔牱鍎?"/>

<s:property value="#attr.p"/><br>

灏唒鍙橀噺璧嬪€肩粰user鍙橀噺骞舵斁鍏ession鑼冨洿鍐?lt;br>

<s:set value="#p" id="user" scope="session"/>

<s:property value="#session.user"/><br>

</body>

杩愯鏁堟灉濡傚浘6.1.7鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.7 set鏍囩鐨勫簲鐢?

5.聽url鏍囩

璇ユ爣绛剧敤鏉ョ敓鎴愪竴涓猆RL鍦板潃锛屾垜浠篃鍙互閫氳繃宓屽param鏍囩鏉ヤ负URL鎸囧畾鍙戦€佸弬鏁般€傝鏍囩涓昏鏈変互涓嬩竴浜涘父鐢ㄥ睘鎬э細

脴聽includeParams灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氭槸鍚﹀湪鐢熸垚鐨刄RL鍙傛暟涓拷鍔犳湰椤甸潰鎺ユ敹鍒扮殑璇锋眰鍙傛暟锛屾湁3涓€煎彲渚涢€夋嫨锛宯one锛?get鍜宎ll锛屽垎鍒唬琛ㄢ€滀笉鍖呭惈鈥濄€佲€滃寘鍚玤et鏂规硶浼犻€掔殑鍙傛暟鈥濆拰鈥滄墍鏈夌殑鍙傛暟鈥濄€?

脴聽value灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳鐢熸垚鐨刄RL鐨勫湴鍧€鍊笺€?

脴聽action灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氫竴涓狝ction浣滀负URL鍦板潃鍊笺€?

脴聽namespace灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氬懡鍚嶇┖闂淬€?

脴聽method灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳皟鐢ˋction鐨勬柟娉曞悕銆?

脴聽includeContext灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氭槸鍚︽妸褰撳墠涓婁笅鏂囧寘鍚湪URL鍦板潃鍊间腑銆?

鍦ㄤ笂杩板睘鎬т腑锛宎ction鍜寁alue灞炴€у彧闇€鎸囧畾鍏朵竴鍗冲彲锛屽鏋滀袱涓兘鏈寚瀹氾紝灏变互褰撳墠椤甸潰浣滀负URL鍦板潃鍊笺€備笅闈㈡槸涓€涓簲鐢║RL鏍囩鐨勭ず渚嬨€?

绀轰緥6.6

[html]聽 view plain 聽copy

  1. <body>聽聽
  2. <h3>浣跨敤url鏍囩</h3>聽聽
  3. <hr>聽聽
  4. 鎸囧畾action灞炴€?涓斾娇鐢╬aram鏍囩浼犲叆鍙傛暟銆?lt;br>聽聽
  5. <s:url聽action="showPerson">聽聽
  6. 聽聽聽聽<s:param聽name="name"聽value="'Jack'"聽/>聽聽
  7. </s:url>聽聽
  8. <hr>聽聽
  9. 鎸囧畾value灞炴€?涓斾娇鐢╬aram鏍囩浼犲叆鍙傛暟銆?lt;br>聽聽
  10. <s:url聽value="http://localhost:8080/firstStruts2/news.jsp">聽聽
  11. 聽聽聽聽<s:param聽name="name"聽value="'Jack'"聽/>聽聽
  12. </s:url>聽聽
  13. </body>聽聽

璇ラ〉闈㈢殑杩愯鏁堟灉濡傚浘6.1.8鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.8 URL鏍囩鐨勫簲鐢?

6.聽date鏍囩

date鏍囩鐢ㄦ潵鎸夋寚瀹氱殑鏍煎紡杈撳嚭涓€涓棩鏈燂紝杩樺彲浠ヨ绠楁寚瀹氭棩鏈熷埌褰撳墠鏃堕棿鐨勬椂宸€傝鏍囩涓昏鏈夊涓嬩竴浜涘睘鎬э細

脴聽format灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氭棩鏈熻緭鍑虹殑鏍煎紡锛屼緥濡傗€測yyy-MM-dd鈥濄€?

脴聽name灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳琚牸寮忓寲杈撳嚭鐨勬棩鏈熷€笺€?

绀轰緥6.7

鎴戜滑鐪嬩笅闈㈢殑瀹炰緥浠g爜锛岀敤鈥滃勾/鏈?鏃モ€濈殑瀹屾暣鏍煎紡鏄剧ず褰撳墠鏃ユ湡锛?

[html]聽 view plain 聽copy

  1. <body>聽聽
  2. <h3>date鏍囩鐨勪娇鐢?lt;/h3>聽聽
  3. <%聽聽
  4. java.util.Date聽now聽=聽new聽java.util.Date();聽聽
  5. pageContext.setAttribute("now"聽,聽now);聽聽
  6. %>聽聽
  7. <s:date聽name="#attr.now"聽format="yyyy/MM/dd"聽nice="false"/><hr><br>聽聽
  8. </body>聽聽

璇ラ〉闈㈢殑杩愯鏁堟灉濡傚浘6.1.9鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.9 date鏍囩鐨勪娇鐢?

7. <s:bean>鏍囩

<s:bean>鐢ㄦ潵鍒涘缓JavaBean瀹炰緥锛屽垱寤篔avaBean瀹炰緥鐨勬椂鍊欙紝鍙互鍦ㄨ鏍囩鍐呴儴浣跨敤<param/>鏍囩涓鸿JavaBean瀹炰緥浼犲叆灞炴€с€傚叾甯歌灞炴€у涓嬶細

脴聽Id:鎸囧畾鍒涘缓JavaBean鐨勫紩鐢╥d.

脴聽name:鎸囧畾闇€瑕佸疄渚嬪寲鐨凧avaBean鐨勫疄鐜扮被

<s:bean>鏍囩鐢ㄦ硶鐨勫涓嬶細

锛?锛壜犲垱寤篔avaBean,鍛藉悕涓築ook.java銆?

[java]聽 view plain 聽copy

  1. public聽class聽Book聽{聽聽聽
  2. private聽String聽isbn;聽聽
  3. private聽String聽name;聽聽
  4. private聽double聽price;聽聽
  5. public聽Book()聽{聽聽
  6. super();聽聽
  7. }聽聽
  8. public聽Book(String聽isbn,聽String聽name,聽double聽price)聽{聽聽
  9. super();聽聽
  10. this.isbn聽=聽isbn;聽聽
  11. this.name聽=聽name;聽聽
  12. this.price聽=聽price;聽聽
  13. }聽聽
  14. public聽String[]聽getAllBooks()聽聽
  15. {聽聽
  16. String[]聽books聽=聽{"JAVA","JSP","ASP.NET","C#"};聽聽
  17. return聽books;聽聽
  18. }聽聽
  19. }聽聽

(2)聽鍒涘缓Jsp椤甸潰.

<!--聽瀹炰緥鍖朾ook JavaBean瀵硅薄,骞跺瓨鍌ㄥ埌StackContext涓?->

<s:bean id="book" name="com.zzab.entity.Book">

<s:param name="isbn" value="'621345'"/>

<s:param name="name" value="'HTML'"/>

</s:bean>

<!--聽杈撳嚭bean瀵硅薄鐨勫€悸?->

book瀵硅薄灞炴€у€?<br>

isbn:<s:property value="#book.isbn"/><br/>

name:<s:property value="#book.name"/><br/>

璋冪敤book瀵硅薄鐨刧etAllBooks鏂规硶鑾峰彇鍏ㄩ儴涔︾睄鍒楄〃:<br/>

<c:forEach var="book" items="${book.allBooks}">

<div>${book }</div>

</c:forEach>

[html]聽 view plain 聽copy

  1. <s:bean聽id="book"聽name="com.zzab.entity.Book">聽聽
  2. <s:param聽name="isbn"聽value="'621345'"/>聽聽
  3. <s:param聽name="name"聽value="'HTML'"/>聽聽
  4. </s:bean>聽聽
  5. <!--聽杈撳嚭bean瀵硅薄鐨勫€悸?->聽聽
  6. book瀵硅薄灞炴€у€?<br>聽聽
  7. isbn:<s:property聽value="#book.isbn"/><br/>聽聽
  8. name:<s:property聽value="#book.name"/><br/>聽聽
  9. 璋冪敤book瀵硅薄鐨刧etAllBooks鏂规硶鑾峰彇鍏ㄩ儴涔︾睄鍒楄〃:<br/>聽聽
  10. <c:forEach聽var="book"聽items="${book.allBooks}">聽聽
  11. <div>${book聽}</div>聽聽
  12. </c:forEach>聽聽

6.2.2聽閫昏緫鎺у埗鏍囩

Struts 2鐨勯€昏緫鎺у埗鏍囩涓昏鐢ㄤ簬绋嬪簭娴佺▼鐨勯€昏緫鎺у埗锛屼緥濡傞€夋嫨銆佸垎鏀€佸惊鐜瓑鎿嶄綔锛屽父瑙佺殑閫昏緫鎺у埗鏍囩涓昏鏈変互涓嬩簲涓爣绛撅細

脴聽if鏍囩锛氱敤浜庢帶鍒堕€夋嫨娴佺▼鐨勬爣绛俱€?

脴聽elseif鏍囩锛氫笌if鏍囩缁撳悎浣跨敤銆?

脴聽else鏍囩锛氫笌if鏍囩缁撳悎浣跨敤銆?

脴聽generator鏍囩锛岀敤浜庡皢涓€涓瓧绗︿覆瑙f瀽鎴愪竴涓泦鍚堛€?

脴聽iterator鏍囩锛氳繖鏄竴涓凯浠e櫒锛岀敤浜庡皢闆嗗悎杩涜寰幆杈撳嚭銆?

1.聽if/elseif/else鏍囩

if/elseif/else杩欎笁涓爣绛鹃€氬父缁撳悎浣跨敤锛岄兘鏄敤浜庤繘琛岀▼搴忓垎鏀€昏緫鎺у埗锛岃窡澶氭暟缂栫▼璇█涓殑if/elseif/else璇彞鐨勫姛鑳界浉浼硷紝test灞炴€х敤鏉ヨ缃瘮杈冭〃杈惧紡锛屽叿浣撹娉曞涓嬫墍绀猴細

<s:if test="琛ㄨ揪寮?>

鏍囩浣?

<s:elseif test="琛ㄨ揪寮?>

鏍囩浣?

<s:else>

鏍囩浣?

</s:else>

涓嬮潰鏄竴涓疄渚嬬殑浠g爜鐗囨锛?

绀轰緥6.8

[html]聽 view plain 聽copy

  1. <s:set聽name="dengji"聽value="85"/>聽聽
  2. <s:if聽test="#dengji>=90">聽聽
  3. 聽聽聽聽鎴愮哗浼樼聽聽
  4. </s:if>聽聽
  5. <s:elseif聽test="#dengji>=80">聽聽
  6. 聽聽聽聽鎴愮哗鑹ソ聽聽
  7. </s:elseif>聽聽
  8. <s:elseif聽test="#dengji>=60">聽聽
  9. 鎴愮哗鍚堟牸聽聽
  10. </s:elseif>聽聽
  11. <s:else>聽聽
  12. 聽聽聽聽鎴愮哗涓嶅悎鏍悸犅?
  13. </s:else>聽聽

涓婅堪浠g爜鍏堥€氳繃set鏍囩瀹氫箟浜嗕竴涓悕涓篸engji鐨勫睘鎬у苟璧嬪€间负85锛岀劧鍚庨€氳繃if/elseif/else鏍囩鏍规嵁dengji灞炴€х殑鍊肩殑鑼冨洿鏉ユ帶鍒惰緭鍑烘垚缁╃殑璇勪环鏄€滀紭绉€鈥濄€佲€滆壇濂解€濄€佲€滃悎鏍尖€濇垨鈥滀笉鍚堟牸鈥濄€傝繍琛屾晥鏋滃鍥?.1.10鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.10 if/elseif/else鏍囩鐨勫簲鐢?

2.聽iterator鏍囩

璇ユ爣绛句富瑕佺敤浜庡闆嗗悎绫诲瀷鐨勫彉閲忚繘琛岃凯浠h緭鍑猴紝杩欓噷鐨勯泦鍚堢被鍨嬪寘鎷琇ist銆丼et銆佹暟缁勫拰Map绛夈€傝鏍囩涓昏鏈変笁涓睘鎬э細

脴聽value灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氳杩唬杈撳嚭鐨勯泦鍚堬紝琚凯浠g殑闆嗗悎鍙互鐢監GNL琛ㄨ揪寮忔寚

瀹氫篃鍙互閫氳繃Action杩斿洖涓€涓泦鍚堢被鍨嬬殑鍙橀噺銆?

脴聽id灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氶泦鍚堜腑鍏冪礌鐨処D灞炴€с€?

脴聽status灞炴€э細璇ュ睘鎬у彲浠ュ疄鐜颁竴浜涢檮鍔犲姛鑳斤紝璇﹁鍚庨潰璁茶В銆?

涓嬮潰鏄竴涓疄渚嬬殑浠g爜鐗囨锛?

绀轰緥6.9

<h3>iterator鐨勭敤娉?lt;/h3>

聽<%

聽 List bookList=new ArrayList();

聽 bookList.add("Spring3.0鎶€鏈疂鍏?);

聽 bookList.add("Struts2鏉冨▉鎸囧崡");

聽 bookList.add("JavaScript鎶€鏈ぇ鍏?);

聽 bookList.add("JSP鎶€鏈瑙?);

聽 bookList.add("Ajax瀹炴垬");

聽 pageContext.setAttribute("bookList",bookList);

聽聽%>

聽<s:iterator value="#attr.bookList" id="bookname">

聽<li><s:property value="bookname" /></li>

聽</s:iterator>

涓婅堪浠g爜閫氳繃iterator鏍囩鐨剉alue灞炴€ф寚瀹氫簡涓€涓泦鍚堬紝骞舵寚瀹氬畠鐨刬d灞炴€т负bookname锛岀劧鍚庡氨鍙互閫氳繃<s:property value="bookname" />杈撳嚭闆嗗悎涓瘡涓厓绱犵殑鍊笺€傝椤甸潰鐨勮繍琛屾晥鏋滃鍥?.1.11鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.11 iterator鏍囩鐨勫簲鐢?

iterator鏍囩鐨剆tatus灞炴€у緢鏈夌敤锛屽埄鐢ㄥ畠鍙互瀹炵幇涓€浜涘緢瀹炵敤鐨勫姛鑳姐€傛寚瀹氳灞炴€у悗锛屾瘡娆¤凯浠i兘浼氫互姝ゅ睘鎬т负鍚嶇О鍒涘缓涓€涓狪teratorStatus鐨勫疄渚嬪璞★紝璇ュ疄渚嬪璞″寘鍚簡浠ヤ笅鍑犱釜灞炴€э細

脴聽count锛氳繑鍥炲綋鍓嶈凯浠d簡鍑犱釜鍏冪礌銆?

脴聽index锛氳繑鍥炲綋鍓嶈凯浠e厓绱犲湪闆嗗悎涓殑绱㈠紩鍊笺€?

脴聽even锛氳繑鍥炲綋鍓嶈凯浠e厓绱犵殑绱㈠紩鍊兼槸鍚︿负鍋舵暟銆?

脴聽odd锛氳繑鍥炲綋鍓嶈凯浠e厓绱犵殑绱㈠紩鍊兼槸鍚︿负濂囨暟銆?

脴聽first锛氳繑鍥炲綋鍓嶈凯浠e厓绱犳槸鍚︽槸绗竴涓厓绱犮€?

脴聽last锛氳繑鍥炲綋鍓嶈凯浠e厓绱犳槸鍚︽槸鏈€鍚庝竴涓厓绱犮€?

鎴戜滑鐪嬩笅闈㈢殑浠g爜鐗囨锛?

<table width="200">

聽<s:iterator value="#attr.bookList" id="name" status="st">

<tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>>

<td><s:property value="#st.index"/></td>

<td><s:property value="name"/></td>

</tr>

聽</s:iterator>

</table>

涓婅堪浠g爜浠ヨ〃鏍肩殑褰㈠紡杈撳嚭浜嗛泦鍚堜腑鐨勬瘡涓厓绱犲拰鍏冪礌鐨勭储寮曞€硷紝骞堕€氳繃iterator鏍囩鐨剆tatus灞炴€ф帶鍒跺鏁拌鐨勮儗鏅壊锛岃繍琛屾晥鏋滃鍥?.1.12鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.12 status灞炴€х殑搴旂敤

3.聽generator鏍囩

璇ユ爣绛惧彲浠ュ皢涓€涓瓧绗︿覆鎸夋寚瀹氱殑鍒嗛殧绗﹀垎闅旀垚澶氫釜瀛愪覆锛屾柊鐢熸垚鐨勫涓瓙涓插彲浠ヤ娇鐢╥terator鏍囩杩涜杩唬杈撳嚭銆俫enerator鏍囩甯歌鐨勫睘鎬у涓嬶細

脴聽count灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氭墍鐢熸垚闆嗗悎涓厓绱犵殑鎬绘暟銆?

脴聽separator灞炴€э細璇ュ睘鎬х敤鏉ユ寚瀹氬垎闅旂銆?

脴聽converter灞炴€э細璇ュ睘鎬ф寚瀹氫簡涓€涓浆鎹㈠櫒锛岃杞崲鍣ㄨ礋璐e皢闆嗗悎涓殑姣忎釜瀛楃涓茶浆鎹㈡垚

瀵硅薄銆?

脴聽id灞炴€э細濡傛灉鎸囧畾浜嗚灞炴€э紝鍒欐柊鐢熸垚鐨勯泦鍚堜細浠ユ涓哄悕绉帮紝琚斁鍦╬ageContext涓€?

鎴戜滑鏉ョ湅涓嬮潰鐨勪唬鐮佺墖娈碉細

绀轰緥6.10

<s:generator val="'Spring鎶€鏈疂鍏?Ajax瀹炴垬,Struts2鏉冨▉鎸囧崡,JSP鎶€鏈瑙?

JavaScript鎶€鏈ぇ鍏?" separator="," id="generList"/>

<table width="320">

<caption>杩唬杈撳嚭鐢眊enerator鏍囩浜х敓鐨勯泦鍚?lt;/caption>

聽<s:iterator value="#attr.generList" id="name" status="st">

<tr>

<td><s:property value="#st.index"/></td>

<td><s:property value="name"/></td>

</tr>

聽</s:iterator>

</table>

涓婅堪浠g爜浣跨敤generator鏍囩鎶婁竴涓瓧绗︿覆鎸夐€楀彿杩涜浜嗗垎鍓诧紝骞舵妸浜х敓鐨勯泦鍚堟寜鐓ф寚瀹氱殑鈥済enerList鈥濅负id淇濆瓨鍦╬ageContext涓紝鎺ヤ笅鏉ヤ娇鐢╥terator鏍囩杩唬杈撳嚭generList闆嗗悎涓殑鍏冪礌锛岃繍琛屾晥鏋滃鍥?.1.13鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.1.13 generator鏍囩鐨勫簲鐢?

鏈珷鎬荤粨

脴聽ActionContext瀵硅薄銆侫ctionContext锛坈om.opensymphony.xwork.ActionContext锛夋槸Action鎵ц鏃剁殑涓婁笅鏂囥€傛垜浠彲浠ユ妸涓婁笅鏂囩湅浣滄槸涓€涓鍣紝鐢ㄤ簬瀛樻斁Action鎵ц鏃堕渶瑕佷娇鐢ㄧ殑瀵硅薄淇℃伅銆?

脴聽StackContext瀵硅薄銆傝姹傚弬鏁帮紙Parameter锛夈€佷細璇濓紙Session锛夈€丼ervlet涓婁笅鏂囷紙ServletContext锛夌瓑瀵硅薄锛屽疄闄呬笂閮藉瓨鍌ㄥ湪ActionContext涓婁笅鏂囦腑鐨凷tackContext瀵硅薄涓€?

脴聽ValueStack瀵硅薄銆係truts2浼氫负姣忎竴娆ction鐨勮姹傚垱寤轰笌涔嬪搴旂殑ValueStack锛屽苟灏嗘墍鏈堿ction灞炴€ф暟鎹瓨鍌ㄥ埌ValueStack涓紝鍐嶅皢ValueStack聽鏆撮湶缁欒鍥鹃〉闈紝杩欐牱椤甸潰灏卞彲浠ョ洿鎺ヨ闂瓵ction涓殑灞炴€у€笺€?

脴聽OGNL鍗筹紙Object-Graph Navigation Language锛夛紝鏄璞″浘瀵艰埅璇█鐨勭缉鍐欙紝瀹冩槸涓€涓紑婧愰」鐩紝宸ヤ綔鍦ㄨ鍥惧眰锛岀敤鏉ュ彇浠i〉闈腑鐨凧ava鑴氭湰锛岀畝鍖栨暟鎹闂搷浣溿€?

锛?锛夎闂笂涓嬫枃涓殑鏁版嵁銆俈alueStack鏄疧GNL鐨勬牴锛屽悓鏃剁敱浜嶰GNL涓婁笅鏂囦腑鐨勬牴瀵硅薄鍙互鐩存帴璁块棶锛屾墍浠ラ€氳繃OGNL璁块棶ValueStack涓殑鏁版嵁鏃讹紝涓嶉渶瑕佷娇鐢ㄤ换浣曠壒娈婄殑鏍囪锛岃€岃闂瓵ctionConext涓殑鍏朵粬瀵硅薄鏃跺垯闇€瑕佷娇鐢ㄢ€?鈥濇爣璁般€?

锛?锛夋墽琛孞avaBean鏂规硶銆侽GNL涓嶄粎鍙互鑷姩鎵цgetter鏂规硶锛岃€屼笖鑳藉鎵цJavaBean鐨勫叾浠栨柟娉曘€傛洿閲嶈鐨勬槸锛岃繕鑳藉鍦ㄦ墽琛屾柟娉曠殑鏃跺€欎紶鍏ュ弬鏁帮紝OGNL鎵ц鐨勬柟娉曞彲浠ユ槸闈欐€佹柟娉曞拰闈為潤鎬佹柟娉曘€?

脴聽Struts 2鐨勬爣绛惧簱

锛?锛塖truts2鏍囩搴撶殑鍒嗙被銆傛垜浠彲浠ュ皢Struts 2鐨勬爣绛惧簱鍒嗘垚涓夊ぇ绫伙細UI銆侀潪UI銆乤jax鏍囩锛屽叾涓璘I鏍囩鍙堝彲鍒嗕负琛ㄥ崟 銆侀潪琛ㄥ崟鏍囩锛岄潪UI鏍囩鍙垎涓烘暟鎹闂€侀€昏緫鎺у埗鏍囩銆?

锛?锛夋暟鎹闂爣绛俱€傚父瑙佺殑鏁版嵁鏍囩涓昏鍖呭惈action銆乮nclude銆乸aram聽銆乸roperty銆乻et銆乼ext銆乽rl銆乨ate绛夈€?

锛?锛夐€昏緫鎺у埗鏍囩銆傞€昏緫鎺у埗鏍囩涓昏鐢ㄤ簬绋嬪簭娴佺▼鐨勯€昏緫鎺у埗锛屼緥濡傞€夋嫨銆佸垎鏀€佸惊鐜瓑鎿嶄綔锛屽父瑙佺殑閫昏緫鎺у埗鏍囩涓昏鏈変簲涓爣绛撅細if聽銆乪lseif銆伮爀lse聽銆乬enerator聽銆乮terator銆?

浠诲姟瀹炶閮ㄥ垎

1锛氭煡璇㈢鐞嗗憳

璁粌鎶€鑳界偣

脴聽OGNL

脴聽property鏍囩

脴聽iterator鏍囩

聽聽闇€姹傝鏄?

鍦ㄥ墠闈㈢珷鑺傜殑浠诲姟瀹炶閮ㄥ垎锛屾垜浠疄鐜颁簡绠$悊鍛樼殑澧炪€佸垹銆佹敼銆佹煡绛夊姛鑳斤紝鐜板湪瑕佹眰鍦ㄦ煡璇㈢鐞嗗憳鏃讹紝浣跨敤OGNL鍜宨terator銆乸roperty绛夋爣绛炬樉绀烘煡璇㈠埌鐨勭鐞嗗憳鍒楄〃锛屽苟涓斿彧鏄剧ず瀵嗙爜闀垮害灏忎簬3鐨勭鐞嗗憳淇℃伅銆?

聽聽鍏抽敭浠g爜

<s:iterator value="#attr.adminList.{?#this.pwd.length()>3}" id="admin">

聽聽 <tr>

聽聽聽聽 <td align="center"><s:property value="id"/></td>

聽聽聽聽 <td align="center"><s:property value="name"/></td>

聽聽聽聽 <td align="center"><s:property value="pwd"/></td>

聽聽 </tr>

</s:iterator>

2锛氭煡璇㈠浘涔?

璁粌鎶€鑳界偣

脴聽OGNL

脴聽property鏍囩

脴聽iterator鏍囩

聽聽闇€姹傝鏄?

鍦ㄥ墠闈㈢珷鑺傜殑浠诲姟瀹炶閮ㄥ垎锛屾垜浠疄鐜颁簡鏌ヨ鍥句功鐨勬渚嬶紝鐜板湪瑕佹眰浣跨敤OGNL鍜宨terator銆乸roperty绛夋爣绛炬樉绀烘煡璇㈠埌鐨勫浘涔﹀垪琛紝骞朵笖璁剧疆鍋舵暟琛岀殑鑳屾櫙鑹蹭负鐏拌壊銆?

3锛氭煡鎵惧鎴蜂俊鎭?

璁粌鎶€鑳界偣

脴聽OGNL

脴聽鏁版嵁璁块棶鏍囩

脴聽鎺у埗鏍囩

聽聽闇€姹傝鏄?

瀹炵幇杈撳叆瀹㈡埛缂栧彿鏃讹紝鏌ユ壘瀵瑰簲鐨勫鎴锋槸鍚﹀瓨鍦紝鑻ヤ笉瀛樺湪锛屽垯杈撳嚭鏃犳硶鏌ユ壘鍒版瀹㈡埛鐨勬彁绀猴紱鑻ュ瓨鍦紝鍒欒繘涓€姝ユ樉绀哄鎴风殑璁㈠崟淇℃伅銆?

聽聽瀹炵幇鎬濊矾

锛?锛壜犲垱寤虹敤浜庢弿杩拌鍗曠殑瀹炰綋绫伙紝鍛藉悕涓篛rder.java銆?

public class Order implements Serializable{

//璁㈠崟Id

private String orderId;

//璁㈠崟鏃ユ湡

private Date orderDtm;

//璁㈠崟鐘舵€伮?锛氱鐢?锛氬惎鐢?

private int state;

//鏃犲弬鏋勯€犲嚱鏁?

public Order() {

super();

// TODO Auto-generated constructor stub

}

//鏈夊弬鏋勯€犲嚱鏁?

public Order(String orderId, Date orderDtm, int state) {

super();

this.orderId = orderId;

this.orderDtm = orderDtm;

this.state = state;

}

//getter setter鐪佺暐......

}

锛?锛壜犲垱寤虹敤浜庢弿杩板鎴风殑瀹炰綋绫伙紝鍛藉悕涓篊ust.java銆?

public class Cust implements Serializable{

//瀹㈡埛缂栧彿

private String custId;

//瀹㈡埛鍚嶇О

private String custName;

//鐢佃瘽

private String tel;

//璁㈠崟闆嗗悎

private List<Order> orders = new ArrayList<Order>();

//鏃犲弬鏋勯€犲嚱鏁?

public Cust() {

super();

// TODO Auto-generated constructor stub

}

//鏈夊弬鏋勯€犲嚱鏁?

public Cust(String custId, String custName, String tel) {

super();

this.custId = custId;

this.custName = custName;

this.tel = tel;

}

//getter setter鐪佺暐......

}

锛?锛壜犲垱寤虹敤浜庡鐞嗕笟鍔¢€昏緫鐨凧avaBean锛屽懡鍚嶄负CustService.java銆?

public class CustService {

//瀹氫箟瀹㈡埛鍒楄〃

private static List<Cust> custList = new ArrayList<Cust>();

//闈欐€佹瀯閫犲櫒锛屽垵濮嬪寲瀹㈡埛鍜岃鍗曚俊鎭?

static{

try {

//鐢ㄤ簬鏍煎紡鍖栨棩鏈?

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

//鍒涘缓瀹㈡埛c1

Cust c1 = new Cust("c001", "寮犱笁", "110");

Order c1Order1 聽= new Order("OR001", sdf.parse("2012-01-01"), 0);

Order c1Order2 聽= new Order("OR002", sdf.parse("2012-01-02"), 0);

Order c1Order3 聽= new Order("OR003", sdf.parse("2012-01-03"), 1);

//娣诲姞璁㈠崟鍒癱1瀹㈡埛

c1.getOrders().add(c1Order1);

c1.getOrders().add(c1Order2);

c1.getOrders().add(c1Order3);

//鍒涘缓瀹㈡埛c2

Cust c2 = new Cust("c002", "鏉庡洓", "114");

Order c2Order1 聽= new Order("OR004", sdf.parse("2012-01-04"), 0);

Order c2Order2 聽= new Order("OR005", sdf.parse("2012-01-05"), 0);

Order c2Order3 聽= new Order("OR006", sdf.parse("2012-01-06"), 1);

//娣诲姞璁㈠崟鍒癱2瀹㈡埛

c2.getOrders().add(c2Order1);

c2.getOrders().add(c2Order2);

c2.getOrders().add(c2Order3);

//鍒涘缓瀹㈡埛c3

Cust c3 = new Cust("c003", "鐜嬩簲", "119");

Order c3Order1 聽= new Order("OR007", sdf.parse("2012-01-07"), 0);

Order c3Order2 聽= new Order("OR008", sdf.parse("2012-01-08"), 0);

Order c3Order3 聽= new Order("OR009", sdf.parse("2012-01-09"), 1);

//娣诲姞璁㈠崟鍒癱3瀹㈡埛

c3.getOrders().add(c3Order1);

c3.getOrders().add(c3Order2);

c3.getOrders().add(c3Order3);

//鎶婂鎴锋坊鍔犲埌List鍒楄〃涓?

custList.add(c1);

custList.add(c2);

custList.add(c3);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//

public static Cust findCustById(String custId){

//寰幆姣忎釜瀹㈡埛

for (Cust cust : custList) {

//寰幆姣忎釜瀹㈡埛

if(cust.getCustId().equals(custId)){

return cust;

}

}

//濡傛灉鎵句笉鍒板垯杩斿洖绌?

return null;

}

//

public static List<Order> getCustOrders(String custId){

//寰幆姣忎釜瀹㈡埛

for (Cust cust : custList) {

//寰幆姣忎釜瀹㈡埛

if(cust.getCustId().equals(custId)){

//杩斿洖瀵瑰簲瀹㈡埛鐨勮鍗?

return cust.getOrders();

}

}

//濡傛灉鎵句笉鍒板垯杩斿洖绌?

return null;

}

}

锛?锛壜犲垱寤虹敤浜庡鐞嗕笟鍔¢€昏緫鐨勬帶鍒跺櫒Action,鍛藉悕涓篊ustAction.java銆?

public class CustAction extends ActionSupport {

//灏佽鐢ㄦ埛鐨刬d

private String custId;

//鏌ユ壘璁㈠崟

public String findOrder()throws Exception{

//璋冪敤涓氬姟灞?

List<Order> orderList = CustService.getCustOrders(custId);

//灏嗚鍗曟斁鍒皉equest涓?

ServletActionContext.getRequest().setAttribute("orderList", orderList);

//杩斿洖input閫昏緫瑙嗗浘

return SUCCESS;

}

public String findCust() {

// TODO Auto-generated method stub

//璋冪敤涓氬姟閫昏緫

Cust cust = CustService.findCustById(custId);

if(cust!=null){

//灏哻ust瀛樺偍鍒皊ession涓?

ServletActionContext.getRequest().getSession().setAttribute("cust", cust);

}

else{

//鍚﹀垯缁檓sg璧嬪€硷紝鍑嗗寮瑰嚭瀵硅瘽妗嗐€?

ServletActionContext.getRequest().setAttribute("msg","<script>alert('娌℃湁姝ょ敤鎴?);</script>");

}

//杩斿洖input閫昏緫瑙嗗浘

return SUCCESS;

}

//getter setter鏂规硶

public String getCustId() {

return custId;

}

public void setCustId(String custId) {

this.custId = custId;

}

}

锛?锛壜犲垱寤篔sp椤甸潰锛屽懡鍚嶄负jd1.jsp銆?

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

聽聽<head>

聽聽聽

聽聽聽聽<title>My JSP 'jd1.jsp' starting page</title>

聽聽聽聽

聽聽</head>

聽聽

聽聽<body>

聽聽聽 <h2>

聽聽聽 <form action="custaction!findCust.action" method="post">

聽聽聽 瀹屾垚瀹㈡埛鏌ユ壘鍔熻兘锛?lt;hr>

聽聽聽 瀹㈡埛缂栧彿锛?lt;input type="text" name="custId"> <br/>

聽聽聽 <input type="submit" value="鏌ユ壘">

聽聽聽 <!--聽濡傛灉鎵惧埌璇ョ敤鎴仿?->

聽聽聽 <s:if test="#session.cust">

聽聽聽 <hr/>

聽聽聽 缂栧彿锛?{cust.custId}<br/>

聽聽聽 濮撳悕锛?{cust.custName}<br/>

聽聽聽 鑱旂郴鏂瑰紡锛?{cust.tel}<br/><a href="custaction!findOrder.action?custId=${cust.custId }" target="_blank" rel="external nofollow" >鏌ョ湅璁㈠崟</a>

聽聽聽 <hr/>

聽聽聽 </s:if>

聽聽聽 <!--聽濡傛灉瀛樺湪璁㈠崟鍒楄〃聽-->

聽聽聽 <s:if test="#request.orderList">

聽聽聽 <hr/>

聽聽聽 <table >

聽聽聽 <tr>

聽聽聽 <td>璁㈠崟缂栧彿</td>

聽聽聽 <td>璁㈠崟鏃ユ湡</td>

聽聽聽 <td>璁㈠崟鐘舵€?lt;/td>

聽聽聽 </tr>

聽聽聽 <s:iterator id="row" value="#request.orderList">

聽聽聽 <tr>

聽聽聽 <td>${row.orderId }</td>

聽聽聽 <td><s:date name="#row.orderDtm" format="yyyy骞碝M鏈坉d鏃?/></td>

聽聽聽 <td>${row.state==0?"绂佺敤"锛?鍚敤" }</td>

聽聽聽

聽聽聽 </tr>

聽聽聽 </s:iterator>

聽聽聽 </table>

聽聽聽

聽聽聽 </s:if>

聽聽聽 </form>

聽聽聽

聽聽聽 </h2>

聽聽聽 <!--聽鎵цmsg -->

聽聽聽 ${msg }

聽聽</body>

</html>

锛?锛壜犻厤缃甋truts.xml鏂囦欢銆?

<struts>

<!--聽閰嶇疆瀛楃闆喡?->

<constant name="struts.i18n.encoding" value="utf-8"></constant>

<!--聽閰嶇疆涓婚聽-->

<constant name="struts.ui.theme" value="simple"></constant>

<package name="test" extends="struts-default">

<action name="custaction" class="com.zzzy.web.CustAction">

<result >/jd1.jsp</result>

</action>

</package>

</struts>

锛?锛壜犺繍琛宩d1.jsp椤甸潰锛屾晥鏋滃鍥?.2.1鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.2.1聽杩愯jd1.jsp

鍦ㄥ浘6.2.1涓緭鍏ラ渶瑕佹煡鎵剧殑瀹㈡埛缂栧彿銆?

鑻ョ紪鍙蜂笉瀛樺湪锛岀郴缁熷皢浼氭樉绀烘彁绀烘秷鎭€偮犲鍥?.2.2鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.2.2聽鐢ㄦ埛涓嶅瓨鍦?

鑻ョ紪鍙峰瓨鍦紝绯荤粺灏嗘樉绀鸿瀹㈡埛瀵瑰簲鐨勮缁嗕俊鎭紝濡傚浘鍥?.2.3鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.2.3聽鏌ユ壘瀹㈡埛骞舵樉绀鸿缁嗕俊鎭?

鍦ㄥ浘6.2.3涓崟鍑烩€滄煡鐪嬭鍗曗€濇寜閽紝绯荤粺灏嗘樉绀哄鎴峰搴旂殑璁㈠崟淇℃伅锛屽鍥?.2.4鎵€绀恒€?

Struts2标签库和OGNL 学习内容

鍥?.2.4鏄剧ず瀹㈡埛鐨勮鍗曚俊鎭?

宸╁浐缁冧範

涓€銆侀€夋嫨棰?

1.聽浠ヤ笅鍏充簬OGNL鐨勮娉曟纭殑鏄紙锛夈€?

A.聽ActionContext鏄疧GNL鐨勪笂涓嬫枃鐜

B.聽ValueStack鏄疧GNL鐨勬牴

C.聽StackContext鏄疧GNL鐨勪笂涓嬫枃鐜

D.聽ActionContext鏄疧GNL鐨勬牴

2.聽鍋囪session涓瓨鍦ㄥ悕涓簎id鐨勫睘鎬э紝閫氳繃OGNL璁块棶璇ュ睘鎬х殑浠g爜鏄紙锛夈€?

A.聽#uid

E.聽uid

F.聽#session.uid

G.聽${session.uid}

3.聽鍏充簬鈥?session.users.{?#this.age>20}鈥濈殑OGNL浠g爜鎵€琛ㄧず鐨勬剰鎬濇槸锛堬級銆?

A.聽浠巙sers闆嗗悎涓彇鍑虹涓€涓勾榫勫ぇ浜?0鐨勫璞?

H.聽浠巙sers闆嗗悎涓彇鍑烘墍鏈夊勾榫勫ぇ浜?0鐨勫璞?

I.聽浠巙sers闆嗗悎涓彇鍑烘渶鍚庝竴涓勾榫勫ぇ浜?0鐨勫璞?

J.聽璇ヤ唬鐮佹湁璇硶閿欒

4.聽鍋囪椤甸潰涓瓨鍦ㄨ繖鏍蜂竴琛屼唬鐮佲€?lt;s:property />鈥濓紝鍒欎笅闈㈣娉曟纭殑鏄紙锛夈€?

A.聽缂栬瘧閿欒

K.聽椤甸潰涓嶆樉绀轰换浣曞唴瀹?

L.聽杈撳嚭ValueStack涓渶涓婇潰鐨勫璞?

M.聽浠ヤ笂璇存硶閮戒笉姝g‘

5.聽浠ヤ笅锛堬級涓嶅睘浜嶴truts 2鐨勬暟鎹闂爣绛俱€?

A.聽set

B.聽date

C.聽text

D.聽textfield聽

继续阅读