锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
閽堝浠ヤ笅鍑犵鎯呭喌鐨凪ap:
鐢ㄦ硶錛?/p>
鐢ㄦ硶錛?/p>
鐢ㄦ硶
鐢ㄦ硶錛?/p>
package action; import org.springframework.mail.SimpleMailMessage; import com.opensymphony.xwork2.Action; } <?xml version="1.0"
encoding="UTF-8"?> struts2鐨勯厤緗枃浠秙truts.xml: <?xml version="1.0" encoding="UTF-8"
?> <%@ page language="java" import="java.util.*"
pageEncoding="UTF-8"%> 欏甸潰sendok.jsp: <%@ page language="java" import="java.util.*"
pageEncoding="UTF-8"%>
<web-app version="2.4"
</web-app>
Java綾籑ailAction.java:
import org.springframework.mail.javamail.JavaMailSenderImpl;
import com.opensymphony.xwork2.ActionSupport;
public class MailAction extends ActionSupport{
spring閰嶇疆鏂囦歡applicationContext.xml:
<beans xmlns="
</beans>
<!DOCTYPE struts PUBLIC
</struts>
欏甸潰send.jsp:
<html>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
</html>
榪愯send.jsp鍙戦侀偖浠訛紝鎴愬姛鐨勮瘽浼氳煩杞埌sendok.jsp欏甸潰銆?/p>
]]>
1銆佺敤涓ら噸寰幆鐨勬柟娉?/p>
<s:iterator id="data1" value="#request.data" status="d1">
<s:iterator id="data2" value="#request.data1" status="d2">
<s:property value="#data2"/>
</s:iterator>
</s:iterator>
2銆佺敤涓閲嶅驚鐜殑鏂規硶
<s:iterator value="collection1" status="status">
<s:property value="collection1[#status.index][0]"/>
<s:property value="collection1[#status.index][1]"/>
</s:iterator>
**************************************************************************************************************** DAO閲岄潰濡備笅鍐欙細 package com.sinoconcept.match.dao.impl; import java.util.List; import org.springframework.dao.DataAccessException; import com.sinoconcept.match.dao.DirctDAO; public class DirctDAOImpl extends BaseDAOHibernateImpl implements DirctDAO { 聽public List loadAll(String className) { } *************************************************************************************************************** service閲屽涓嬪啓錛?/strong> package com.sinoconcept.match.service.impl; import java.lang.reflect.InvocationTargetException; import org.apache.struts.util.LabelValueBean; import com.sinoconcept.match.dao.DirctDAO; public class DirctServiceImpl implements DirctService { 聽public List getDirect(String dirName) { 聽聽List result = this.getDir(dirName); 聽public List getDirectLabelValueBean(String dirName) { 聽聽List result = this.getDirLableValueBean(dirName); 聽public List getDir(String dirName) { 聽聽result = dirctDAO.loadAll(dirName); 聽聽return result; 聽@SuppressWarnings("unchecked") 聽public DirctDAO getDirctDAO() { 聽public void setDirctDAO(DirctDAO dirctDAO) { } *********************************************************************************************************************** Action閲岄潰濡備笅璁劇疆錛?/p> String status = request.getParameter("status"); List sttusList = dirctService //DrStatus 鏁版嵁鏄犺鏂囦歡鍙浜屼釜瀛楁錛歱rivate Integer id錛沺rivate String value; manDiaryForm.setStatus(status); request.setAttribute("statusList", sttusList); **************************************************************************************************************** 欏甸潰涓婂涓嬭幏寰楋細 <html:select property="status" onchange="sel()"> |
聽聽聽聽聽聽 鍦?/span> web 搴旂敤涓紝浣跨敤 javascript 鐨勬満浼氶潪甯稿銆傝櫧鐒朵笉灝戜功涓婃彁鍙婂鎴鋒湁鍙兘浠庢祻瑙堝櫒鍏抽棴 js 鐨勬墽琛岋紝浣嗘槸瑕佹兂瀹屽叏鐨勪笉浣跨敤瀹冿紝鐩墠鐪嬫潵濂藉儚榪樹笉琛屻傛瘮濡備竴浜涘鏉傜殑 UI 鏄繀欏婚氳繃 js 鏉ュ疄鐜扮殑錛堝涓嬫媺寮忚彍鍗曠瓑絳夛級銆傞偅涔?/span> validation 妗嗘灦鏀笉鏀寔瀹㈡埛绔殑 js 楠岃瘉鍛紵
絳旀鏄細褰撶劧銆傚叿浣撳仛娉曟槸錛?/span>
-聽聽聽聽聽聽聽聽聽 鍦ㄩ〉闈?/span> html:form 鏍囩鍐呴儴娣誨姞 onsubmit="return validateEditForm(this);" 錛堝叿浣撶殑璇硶錛?/span> validate+ 鍦?/span> validation.xml 鏂囦歡涓畾涔夌殑 form 鐨勫悕瀛楋級錛涘錛?/span>
<html:form action="<%=action%>" method="post" onsubmit="return validateEditForm(this);">
-聽聽聽聽聽聽聽聽聽
鍦?/span>
html:form
鍐呴儴鍧椾腑娣誨姞錛?/span>
<html:javascript formName="editForm"/>
聽聽聽聽聽聽 濡傛 2 姝ュ嵆鍙傝櫧鐒訛紝 validation 妗嗘灦闈炲父綆鍗曟槗鐢紝浣嗘槸榪樻槸鏈夐渶瑕佹敞鎰忕殑鍦版柟銆?/span>
1.聽聽聽聽聽聽 浣跨敤 validation 妗嗘灦鍚庯紝 form 蹇呴』浠?/span> ValidatorForm 涓淳鐢燂紝鍚屾椂蹇呴』鍦ㄤ綘鐨?/span> validate 鏂規硶涓厛璋冪敤鍩虹被鐨?/span> validate 鏂規硶銆傚浜庝嬌鐢?/span> Dyna 寮澶寸殑鏂規硶鏉ュ垱寤?/span> formbean 鐨勮鑰咃紝浣犱篃蹇呴』鏀逛負浠?/span> dyna 寮澶村惈鏈?/span> validator 鐨?/span> form 銆?/span>
2.聽聽聽聽聽聽 娉ㄦ剰 DynaValidatorForm 錛?/span> ValidatorForm 錛夊拰 DynaValidatorActionForm 錛?/span> ValidatorActionForm 錛夌殑鍖哄埆銆傚垰寮濮嬫椂浠庡府鍔╀腑娌$湅鏄庣櫧榪?/span> 2 鑰呯殑鍖哄埆錛屽悗鏉ヤ粠緗戜笂涓綃囨枃绔犱腑寰楀埌浜嗙敤娉曠殑鍖哄埆銆傚墠鑰呬富瑕佺殑瑙嗚鏄?/span> formbean 錛岃屽悗鑰呯殑瑙嗚鏄?/span> action 銆?/span>
褰?/span> formbean 琚笉鍚岀殑 action 浣跨敤鏃訛紝瀵逛簬涓嶅悓鐨?/span> action 鑰岃█錛屼嬌鐢ㄧ殑 formbean 鐨勫睘鎬ч泦鍚堟湁澶ф湁灝忋傛鏃跺鏋滀粛鐒朵互 formbean 涓轟富浣擄紝浼氶犳垚鍏朵粬 action 鐨勪笉姝e父浣跨敤銆傚洜姝わ紝 struts 涓彁鍑轟簡 DynaValidatorActionForm 錛?/span> ValidatorActionForm 錛夈傛鏃跺湪 validation.xml 涓殑 form 鏍囩鐨?/span> name 灞炴ф敼涓?/span> action 鐨?/span> path 灞炴э紝鍙堢敱浜?/span> action 涓湁 attribute 鍜?/span> name 灞炴э紝 validation 妗嗘灦灝卞彲鏍規嵁榪欎釜 action 寰楀埌瀵瑰簲鐨?/span> formbean 銆備緥瀛愶細
<formset>
聽 <form name="/createAddress">
聽聽聽 <field property="city"
聽聽聽聽聽聽聽聽聽 depends="required">
聽聽聽聽聽 <arg0 key="prompt.city"/>
聽聽聽 </field>
聽 </form>
聽 <form name="/editAddress">
聽聽聽 <field property="state"
聽聽聽聽聽聽聽聽聽 depends="required">
聽聽聽聽聽 <arg0 key="prompt.state"/>
聽聽聽 </field>
聽 </form>
</formset>
3.聽聽聽聽聽聽 涓?/span> DispatchAction 鐨勯厤鍚堛?/span> Struts1.1 鐨?/span> DispatchAction 浣垮緱鐩稿叧鐨?/span> Action 鐨勫叧緋葷揣瀵嗭紝澶уぇ鍑忓皯浜嗗簲鐢ㄤ腑 Action 鐨勪釜鏁幫紝浣嗘槸闅忎箣鑰屾潵涔熷甫鏉ヤ簡浣跨敤 Validation 妗嗘灦鐨勪笉渚匡紝涓嶈兘涓嶈鏄竴涓仐鎲俱傝鑰呬篃璁歌涓鴻繖縐嶆儏鍐靛彲浠ヤ嬌鐢ㄧ 2 鏉$殑瑙e喅鏂規鏉ヨВ鍐籌紝鍗抽噰鐢?/span> DyanValidatorActionForm 錛岀劧鍚庡湪 Validation.xml 鏂囦歡涓?/span> form 鐨勫悕縐頒嬌鐢ㄤ笉鍚岀殑 Actiond 鐨?/span> path 錛屽嵆鍦?/span> validation.xml 涓嬌鐢細 <form name="/user.do?method=doAdd"> 銆?/span> 聽聽聽 <form name="/user.do?method=doLoad"> 銆傜劧鑰岋紝鍦ㄧ洰鍓嶇殑鐗堟湰涓?/span> Validation 妗嗘灦騫朵笉鏀寔榪欑杈ㄨ銆備竴縐嶇粫榪囪繖涓儏鍐電殑鏂規硶鏄紝閽堝鍚屼竴涓?/span> Action 瀹炵幇綾誨湪 Struts-config.xml 鏂囦歡涓畾涔夊涓?/span> Action 鐨?/span> path 錛屽湪涓嶉渶瑕佽繘琛岄獙璇佺殑鍦版柟灝?/span> Action 鐨?/span> validate 灞炴х疆涓?/span> false 銆傚嵆錛?/span>
struts-config.xml 錛?/span>
<action attribute="editForm" path="/user" name="editForm" input="/editUser.jsp"
parameter="method" scope="request" type="foxgem.struts.UserDispatchAction"
聽聽聽聽 validate="true">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <forward name="load" path="/editUser.jsp"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <forward name="action" path="/userquery.do?pageId=1"/>
</action>
聽聽聽聽聽聽聽
<action attribute="editForm" path="/loaduser" name="editForm" input="/editUser.jsp"
聽聽聽聽聽聽聽 聽 parameter="method" scope="request" type="foxgem.struts.UserDispatchAction"
聽聽聽聽聽聽聽 聽 validate="false">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <forward name="load" path="/editUser.jsp"/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <forward name="action" path="/userquery.do?pageId=1"/>
</action>
鐒跺悗鍦?/span>
validation.xml
鏂囦歡涓嬌鐢?/span>
2
鐨勬柟娉曘?/span>
聽聽聽聽聽聽 鎬葷殑璇存潵錛?/span> validation 妗嗘灦澶уぇ鐨勬彁楂樹簡欏甸潰楠岃瘉鐨勫紑鍙戞晥鐜囷紝鏇村惛寮曚漢鐨勬槸榪欎簺楠岃瘉鏂規硶鍙氳繃鑷畾涔夌殑 validator 鏉ュ緱鍒板鐢ㄣ備嬌寰楄繖浜涢獙璇佷唬鐮佹洿鍔犻泦涓紝鍙淮鎶ゆу緱鍒板姞寮恒傚綋鐒墮殢鐫欏圭洰鐨勮繘琛岋紝 validation.xml 鍜?/span> validator-rules.xml 浼氶殢涔嬪闀匡紝榪欓儴鍒嗙殑緇存姢宸ヤ綔鍔犻噸浜嗐?/span>
聽聽聽聽聽聽 鍚屾椂錛岀敱浜庝笉鑳介潪甯稿ソ鐨勫拰 DispatchAction 涓璧峰崗浣滐紝涔熶嬌寰楀ぇ閲忎嬌鐢?/span> DispatchAction 鐨勯」鐩笉鑳介潪甯稿ソ鐨勪嬌鐢ㄥ畠銆傚緩璁ぇ閲忎嬌鐢?/span> DispatchAction 鍜岄〉闈㈤獙璇侀潪甯稿鏉傚鍙樼殑欏圭洰鍙互鏆傛椂鎸夊師鏉ョ殑鏂規硶鏉ラ獙璇侊紝涓嶄嬌鐢?/span> validation 妗嗘灦銆?/span>
聽聽聽聽聽聽 鑷充簬 validation 妗嗘灦鐨勫叾浠栬緇嗕俊鎭紝璇峰弬瑙?/span> struts 鐨勬枃妗o紝鍦ㄦ涓嶅啀璧樿堪銆?/span>
n聽聽聽聽聽聽聽聽 http://raibledesigns.com/wiki/Wiki.jsp?page=SecuringDispatchAction DispatchAction 涓?/span> validation 妗嗘灦鐨勫崗浣滆В鍐蟲柟妗堟潵婧愪簬姝ゃ?/span>
n聽聽聽聽聽聽聽聽
http://otn.oracle.com/oramag/oracle/04-jan/o14dev_struts.html
Check Your Form with Validator
n聽聽聽聽聽聽聽聽
http://www-900.ibm.com/developerWorks/cn/java/l-struts1-1/
娣卞叆
Struts 1.1
n聽聽聽聽聽聽聽聽
http://javaboutique.internet.com/tutorials/Struts11Val/
Stepping through the Struts 1.1 Validator
銆銆鏈鍙よ佺殑瑙e喅鏂規鏄嬌鐢⊿tring鐨勫瓧鑺傜爜杞崲錛岃繖縐嶆柟妗堥棶棰樻槸涓嶆柟渚匡紝鎴戜滑闇瑕佺牬鍧忓璞″皝瑁呮э紝榪涜瀛楄妭鐮佽漿鎹€?/p>
銆銆榪樻湁涓縐嶆柟寮忔槸瀵笿2EE瀹瑰櫒榪涜緙栫爜璁劇疆錛屽鏋淛2EE搴旂敤緋葷粺鑴辯璇ュ鍣紝鍒欎細鍙戠敓涔辯爜錛岃屼笖鎸囧畾瀹瑰櫒閰嶇疆涓嶇鍚圝2EE搴旂敤鍜屽鍣ㄥ垎紱葷殑鍘熷垯銆?/p>
銆銆鍦↗ava鍐呴儴榪愮畻涓紝娑夊強鍒扮殑鎵鏈夊瓧絎︿覆閮戒細琚漿鍖栦負UTF-8緙栫爜鏉ヨ繘琛岃繍綆椼傞偅涔堬紝鍦ㄨJava杞寲涔嬪墠錛屽瓧絎︿覆鏄粈涔堟牱鐨勫瓧絎﹂泦錛?Java鎬繪槸鏍規嵁鎿嶄綔緋葷粺鐨勯粯璁ょ紪鐮佸瓧絎﹂泦鏉ュ喅瀹氬瓧絎︿覆鐨勫垵濮嬬紪鐮侊紝鑰屼笖Java緋葷粺鐨勮緭鍏ュ拰杈撳嚭鐨勯兘鏄噰鍙栨搷浣滅郴緇熺殑榛樿緙栫爜銆?/p>
銆銆鍥犳錛屽鏋滆兘緇熶竴Java緋葷粺鐨勮緭鍏ャ佽緭鍑哄拰鎿嶄綔緋葷粺3鑰呯殑緙栫爜瀛楃闆嗗悎錛屽皢鑳藉浣縅ava緋葷粺姝g‘澶勭悊鍜屾樉紺烘眽瀛椼傝繖鏄鐞咼ava緋葷粺姹夊瓧鐨勪竴涓師鍒欙紝浣嗘槸鍦ㄥ疄闄呴」鐩腑錛岃兘澶熸紜姄浣忓拰鎺у埗浣廕ava緋葷粺鐨勮緭鍏ュ拰杈撳嚭閮ㄥ垎鏄瘮杈冮毦鐨勩侸2EE涓紝鐢變簬娑夊強鍒板閮ㄦ祻瑙堝櫒鍜屾暟鎹簱絳夛紝鎵浠ヤ腑鏂囬棶棰樹貢鐮佹樉寰楅潪甯哥獊鍑恒?/p>
銆銆J2EE搴旂敤紼嬪簭鏄繍琛屽湪J2EE瀹瑰櫒涓傚湪榪欎釜緋葷粺涓紝杈撳叆閫斿緞鏈夊緢澶氱錛氫竴縐嶆槸閫氳繃欏甸潰琛ㄥ崟鎵撳寘鎴愯姹傦紙request錛夊彂寰鏈嶅姟鍣ㄧ殑錛涚浜岀鏄氳繃鏁版嵁搴撹鍏ワ紱榪樻湁絎?縐嶈緭鍏ユ瘮杈冨鏉傦紝JSP鍦ㄧ涓嬈¤繍琛屾椂鎬繪槸琚紪璇戞垚Servlet錛孞SP涓父甯稿寘鍚腑鏂囧瓧絎︼紝閭d箞緙栬瘧浣跨敤javac鏃訛紝Java灝嗘牴鎹粯璁ょ殑鎿嶄綔緋葷粺緙栫爜浣滀負鍒濆緙栫爜銆傞櫎闈炵壒鍒寚瀹氾紝濡傚湪Jbuilder/eclipse涓彲浠ユ寚瀹氶粯璁ょ殑瀛楃闆嗐?/p>
銆銆杈撳嚭閫斿緞涔熸湁鍑犵錛氱涓縐嶆槸JSP欏甸潰鐨勮緭鍑恒傜敱浜嶫SP欏甸潰宸茬粡琚紪璇戞垚Servlet錛岄偅涔堝湪杈撳嚭鏃訛紝涔熷皢鏍規嵁鎿嶄綔緋葷粺鐨勯粯璁ょ紪鐮佹潵閫夋嫨杈撳嚭緙栫爜錛岄櫎闈炴寚瀹氳緭鍑虹紪鐮佹柟寮忥紱榪樻湁杈撳嚭閫斿緞鏄暟鎹簱錛屽皢瀛楃涓茶緭鍑哄埌鏁版嵁搴撱?/p>
銆銆鐢辨鐪嬫潵錛屼竴涓狫2EE緋葷粺鐨勮緭鍏ヨ緭鍑烘槸闈炲父澶嶆潅錛岃屼笖鏄姩鎬佸彉鍖栫殑錛岃孞ava鏄法騫沖彴榪愯鐨勶紝鍦ㄥ疄闄呯紪璇戝拰榪愯涓紝閮藉彲鑳芥秹鍙婂埌涓嶅悓鐨勬搷浣滅郴緇燂紝濡傛灉浠葷敱Java鑷敱鏍規嵁鎿嶄綔緋葷粺鏉ュ喅瀹氳緭鍏ヨ緭鍑虹殑緙栫爜瀛楃闆嗭紝榪欏皢涓嶅彲鎺у埗鍦板嚭鐜頒貢鐮併?/p>
銆銆姝f槸鐢變簬Java鐨勮法騫沖彴鐗規э紝浣垮緱瀛楃闆嗛棶棰樺繀欏葷敱鍏蜂綋緋葷粺鏉ョ粺涓瑙e喅錛屾墍浠ュ湪涓涓狫ava搴旂敤緋葷粺涓紝瑙e喅涓枃涔辯爜鐨勬牴鏈姙娉曟槸鏄庣‘鎸囧畾鏁翠釜搴旂敤緋葷粺緇熶竴瀛楃闆嗐?/strong>
銆銆鎸囧畾緇熶竴瀛楃闆嗘椂錛屽埌搴曟槸鎸囧畾ISO8859_1 銆丟BK榪樻槸UTF-8鍛紵
銆銆錛?錛夊緇熶竴鎸囧畾涓篒SO8859_1錛屽洜涓虹洰鍓嶅ぇ澶氭暟杞歡閮芥槸瑗挎柟浜虹紪鍒剁殑錛屼粬浠粯璁ょ殑瀛楃闆嗗氨鏄疘SO8859_1錛屽寘鎷搷浣滅郴緇烲inux鍜屾暟鎹簱MySQL絳夈傝繖鏍鳳紝濡傛灉鎸囧畾Jive緇熶竴緙栫爜涓篒SO8859_1錛岄偅涔堝氨鏈変笅闈?涓幆鑺傚繀欏繪妸鎻★細
銆銆寮鍙戝拰緙栬瘧浠g爜鏃舵寚瀹氬瓧絎﹂泦涓篒SO8859_1銆?/p>
銆銆榪愯鎿嶄綔緋葷粺鐨勯粯璁ょ紪鐮佸繀欏繪槸ISO8859_1錛屽Linux銆?/p>
銆銆鍦↗SP澶撮儴澹版槑錛?lt;%@ page contentType="text/html;charset=ISO8859_1" %>銆?/p>
銆銆錛?錛夊鏋滅粺涓鎸囧畾涓篏BK涓枃瀛楃闆嗭紝涓婅堪3涓幆鑺傚悓鏍烽渶瑕佸仛鍒幫紝涓嶅悓鐨勬槸鍙兘榪愯鍦ㄩ粯璁ょ紪鐮佷負GBK鐨勬搷浣滅郴緇燂紝濡備腑鏂嘩indows銆?/p>
銆銆緇熶竴緙栫爜涓篒SO8859_1鍜孏BK铏界劧甯︽潵緙栧埗浠g爜鐨勬柟渚匡紝浣嗘槸鍚勮嚜鍙兘鍦ㄧ浉搴旂殑鎿嶄綔緋葷粺涓婅繍琛屻備絾鏄篃鐮村潖浜咼ava璺ㄥ鉤鍙拌繍琛岀殑浼樿秺鎬э紝鍙湪涓瀹氳寖鍥村唴琛屽緱閫氥備緥濡傦紝涓轟簡浣垮緱GBK緙栫爜鍦╨inux涓婅繍琛岋紝璁劇疆Linux緙栫爜涓篏BK銆?/p>
銆銆閭d箞鏈夋病鏈変竴縐嶉櫎浜嗗簲鐢ㄧ郴緇熶互澶栦笉闇瑕佽繘琛屼換浣曢檮鍔犺緗殑涓枃緙栫爜鏍規湰瑙e喅鏂規鍛紵
銆銆灝咼ava/J2EE緋葷粺鐨勭粺涓緙栫爜瀹氫箟涓篣TF-8銆俇TF-8緙栫爜鏄竴縐嶅吋瀹規墍鏈夎璦鐨勭紪鐮佹柟寮忥紝鎯熶竴姣旇緝楹葷儲鐨勫氨鏄鎵懼埌搴旂敤緋葷粺鐨勬墍鏈夊嚭鍏ュ彛錛岀劧鍚庝嬌鐢║TF-8鍘燴滅粨鎵庘濆畠銆?/p>
銆銆涓涓狫2EE搴旂敤緋葷粺闇瑕佸仛涓嬪垪鍑犳宸ヤ綔錛?/p>
銆銆浠ヤ笂璁ㄨ浜咼ava/J2EE鐨勪腑鏂囬棶棰樸傚鏋滄暣涓簲鐢ㄧ郴緇熸槸浠庡紑濮嬭繘琛屽紑鍙戯紝閭d箞緇熶竴鎸囧畾緙栫爜涓篣TF-8灝遍潪甯稿鏄撳仛鍒般傚鏋滄槸鍦ㄨ嫳鏂囨簮浠g爜鍩虹涓婁簩嬈″紑鍙戯紝閭d箞棣栧厛瑕佸皢鍘熸潵鐨勬簮浠g爜杞崲涓虹粺涓緙栫爜UTF-8錛岄偅涔堣繖縐嶈漿鎹㈠伐浣滀細甯︽潵涓瀹氱殑楹葷儲銆?/p>銆銆
銆銆鏈変簡榪欎釜瑙e喅鏂規錛屾棤璁轟嬌鐢ㄤ粈涔堟鏋禨truts 鎴朖SF鎴栨湭鏉ュ嚭鐜扮殑Java鎶鏈紝緇熶竴鎴怳TF-8鐨勬柟妗堥兘涓嶄細鍑虹幇涔辯爜錛岀瑪鑰呬互鍓嶅湪Jsp/Servlet鏃跺氨鍩轟簬榪欎釜鍘熷垯錛屽悗鏉ヤ嬌鐢⊿truts絳夋鏋訛紝浠庢湭琚貢鐮佸洶鎵拌繃錛屽笇鏈涙湰鏂規鍏竷鍑烘潵渚涙洿澶氬垵瀛﹁呭垎浜紝鍑忓皯Java/J2EE鐨勭涓涓嫤璺檸錛屼篃閬垮厤閲囧彇涓浜涗復鏃惰В鍐蟲柟妗堛?br />
***********************************************************************************************************************
聽 <filter> 聽
聽 <filter-name>encodingFilter</filter-name> 聽
聽 <filter-class> 聽
聽 org.springframework.web.filter.CharacterEncodingFilter 聽
聽 </filter-class> 聽
聽 <init-param> 聽
聽 <param-name>encoding</param-name> 聽
聽 <param-value>UTF-8</param-value> 聽
聽 </init-param> 聽
聽 <init-param> 聽
聽 <param-name>forceEncoding</param-name> 聽
聽 <param-value>true</param-value> 聽
聽 </init-param> 聽
聽 </filter> 聽
聽 聽
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 <filter-mapping> 聽
聽 <filter-name>encodingFilter</filter-name> 聽
聽 <servlet-name>action</servlet-name> 聽
聽 </filter-mapping>
***********************************************************************************************
hibernate+mysql鍐欏叆鏁版嵁搴撶殑涓枃鏄?b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">涔辯爜錛屾庝箞瑙e喅錛燂紵
hibernate.hbm.xml鍔犱笂灞炴?
<property name=\"connection.useUnicode\">true</property>
<property name=\"connection.characterEncoding\">UTF-8</property>
mysql 鐨勯┍鍔ㄧ敤3.0.15浠ヤ笂鐗堟湰鐨?
鍔犱釜Filter, 浣跨敤UTF-8瀛楃闆嗗氨鍙互浜?
聽
1.浣緼pplicationResources.properties鏀寔涓枃
寤虹珛涓涓狝pplicationResources_ISO.properties鏂囦歡錛屾妸搴旂敤紼嬪簭鐢ㄧ殑message閮藉啓榪涘幓錛岀劧鍚庡湪dos涓嬫墽琛岃繖涓懡浠わ紝
native2ascii聽-encoding聽gb2312聽ApplicationResources_ISO.properties聽ApplicationResources.properties
榪欐牱灝變細灝咺SO緙栫爜鐨凙pplicationResources杞崲鎴怗B2312緙栫爜鐨勬牸寮忎簡錛屽悓鏃朵繚瀛樺埌ApplicationResources.properties.
native2ascii榪欎釜宸ュ叿鏄痡dk鑷甫鐨勪竴涓笢涓滐紝鎵浠ュ鏋減ath閮借瀹氭紜氨鍙互鐩存帴榪愯浜嗭紝浣犲彲浠ュ湪$java_home$/bin涓嬫壘鍒頒粬銆?br />杞崲鍚庣殑涓枃綾諱技浜庤繖涓牱瀛?br />iso聽鏍煎紡涓嬄狅細tj.type=鍟嗗搧杞︾被鍨?br />gb2312鏍煎紡涓嬄狅細tj.type=\u5546\u54c1\u8f66\u7c7b\u578b
鐒跺悗鍦╯truts-config.xml涓緗簲鐢ㄨ繖涓祫婧愭枃浠?br />聽<message-resources聽parameter=\"com.huahang.tj.ApplicationResources\"聽key=\"org.apache.struts.action.MESSAGE\"聽/>
寮鍙慾sp鏃跺湪jsp鐨勫紑澶村啓涓?lt;%@聽page聽contentType=\"text/html;聽charset=gb2312\"聽%>錛屽皢瀛楃闆嗚緗垚gb2312灝卞彲浠ヤ簡銆?br />
2.浣挎暟鎹簱鎿嶄綔鏀寔涓枃銆?br />鏁版嵁搴撴搷浣滄敮鎸佷腑鏂囦竴鐩磋鎴戞瘮杈冨ご鐥涳紝浣嗘槸鎰熻阿鍠勮В浜鴻。鍚戞垜鎺ㄨ崘浜唚ww.chinaxp.org錛岃繖涓綉绔欐槸鐢╯truts妗嗘灦寮鍙戠殑錛岃屼笖
寮鏀炬簮鐮侊紝涓嬭澆浜嗘簮鐮佸悗鍙戠幇瀹冪殑涓枃澶勭悊寰楀緢濂斤紝闃呰閮ㄥ垎婧愮爜錛屾病鏈夊彂鐜頒粈涔堢壒孌婄殑瀛楃闆嗚漿鎹紝寰堢撼闂鳳紝鍋剁劧鐪嬪埌妤間笂緗戝弸
鐣欒█鐭ラ亾鍘熸潵servlet鍙互緇熶竴璁劇疆瀛楃杞崲銆俢hinaxp.org灝辨槸榪欎箞鍋氱殑銆?br />鍦╳eb.xml涓姞涓?br />聽聽<filter>
聽聽聽聽<filter-name>Set聽Character聽Encoding</filter-name>
聽聽聽聽<filter-class>com.huahang.tj.struts.filters.SetCharacterEncodingFilter</filter-class>
聽聽聽聽<init-param>
聽聽聽聽聽聽<param-name>encoding</param-name>
聽聽聽聽聽聽<param-value>GB2312</param-value>
聽聽聽聽</init-param>
聽聽聽聽<init-param>
聽聽聽聽聽聽<param-name>ignore</param-name>
聽聽聽聽聽聽<param-value>true</param-value>
聽聽聽聽</init-param>
聽聽</filter>
聽聽<filter-mapping>
聽聽聽聽<filter-name>Set聽Character聽Encoding</filter-name>
聽聽聽聽<servlet-name>action</servlet-name>
聽聽</filter-mapping>
榪欓噷浼氭秹鍙婁竴涓猙ean,婧愮爜濡備笅錛?br />/*
聽*聽XP聽Forum
聽*聽聽聽聽
聽*聽Copyright聽(c)聽2002-2003聽RedSoft聽Group.聽聽All聽rights聽reserved.
聽*
聽*/
package聽com.huahang.tj.struts.filters;
import聽javax.servlet.*;
import聽java.io.IOException;
/**
聽*聽<p>Filter聽that聽sets聽the聽character聽encoding聽to聽be聽used聽in聽parsing聽the
聽*聽incoming聽request,聽either聽unconditionally聽or聽only聽if聽the聽client聽did聽not
聽*聽specify聽a聽character聽encoding.聽聽Configuration聽of聽this聽filter聽is聽based聽on
聽*聽the聽following聽initialization聽parameters:</p>
聽*聽<ul>
聽*聽<li><strong>encoding</strong>聽-聽The聽character聽encoding聽to聽be聽configured
聽*聽聽聽聽聽for聽this聽request,聽either聽conditionally聽or聽unconditionally聽based聽on
聽*聽聽聽聽聽the聽<code>ignore</code>聽initialization聽parameter.聽聽This聽parameter
聽*聽聽聽聽聽is聽required,聽so聽there聽is聽no聽default.</li>
聽*聽<li><strong>ignore</strong>聽-聽If聽set聽to聽\"true\",聽any聽character聽encoding
聽*聽聽聽聽聽specified聽by聽the聽client聽is聽ignored,聽and聽the聽value聽returned聽by聽the
聽*聽聽聽聽聽<code>selectEncoding()</code>聽method聽is聽set.聽聽If聽set聽to聽\"false,
聽*聽聽聽聽聽<code>selectEncoding()</code>聽is聽called聽<strong>only</strong>聽if聽the
聽*聽聽聽聽聽client聽has聽not聽already聽specified聽an聽encoding.聽聽By聽default,聽this
聽*聽聽聽聽聽parameter聽is聽set聽to聽\"true\".</li>
聽*聽</ul>
聽*
聽*聽<p>Although聽this聽filter聽can聽be聽used聽unchanged,聽it聽is聽also聽easy聽to
聽*聽subclass聽it聽and聽make聽the聽<code>selectEncoding()</code>聽method聽more
聽*聽intelligent聽about聽what聽encoding聽to聽choose,聽based聽on聽characteristics聽of
聽*聽the聽incoming聽request聽(such聽as聽the聽values聽of聽the聽<code>Accept-Language</code>
聽*聽and聽<code>User-Agent</code>聽headers,聽or聽a聽value聽stashed聽in聽the聽current
聽*聽user\'s聽session.</p>
聽*
聽*聽@author聽<a聽href=\"mailto:jwtronics@yahoo.com\">John聽Wong</a>
聽*
聽*聽@version聽$Id:聽SetCharacterEncodingFilter.java,v聽1.1聽2002/04/10聽13:59:27聽johnwong聽Exp聽$
聽*/
public聽class聽SetCharacterEncodingFilter聽implements聽Filter聽{
聽聽聽聽//聽-----------------------------------------------------聽Instance聽Variables
聽聽聽聽/**
聽聽聽聽聽*聽The聽default聽character聽encoding聽to聽set聽for聽requests聽that聽pass聽through
聽聽聽聽聽*聽this聽filter.
聽聽聽聽聽*/
聽聽聽聽protected聽String聽encoding聽=聽null;
聽聽聽聽/**
聽聽聽聽聽*聽The聽filter聽configuration聽object聽we聽are聽associated聽with.聽聽If聽this聽value
聽聽聽聽聽*聽is聽null,聽this聽filter聽instance聽is聽not聽currently聽configured.
聽聽聽聽聽*/
聽聽聽聽protected聽FilterConfig聽filterConfig聽=聽null;
聽聽聽聽/**
聽聽聽聽聽*聽Should聽a聽character聽encoding聽specified聽by聽the聽client聽be聽ignored?
聽聽聽聽聽*/
聽聽聽聽protected聽boolean聽ignore聽=聽true;
聽聽聽聽//聽---------------------------------------------------------聽Public聽Methods
聽聽聽聽/**
聽聽聽聽聽*聽Take聽this聽filter聽out聽of聽service.
聽聽聽聽聽*/
聽聽聽聽public聽void聽destroy()聽{
聽聽聽聽聽聽聽聽this.encoding聽=聽null;
聽聽聽聽聽聽聽聽this.filterConfig聽=聽null;
聽聽聽聽}
聽聽聽聽/**
聽聽聽聽聽*聽Select聽and聽set聽(if聽specified)聽the聽character聽encoding聽to聽be聽used聽to
聽聽聽聽聽*聽interpret聽request聽parameters聽for聽this聽request.
聽聽聽聽聽*
聽聽聽聽聽*聽@param聽request聽The聽servlet聽request聽we聽are聽processing
聽聽聽聽聽*聽@param聽result聽The聽servlet聽response聽we聽are聽creating
聽聽聽聽聽*聽@param聽chain聽The聽filter聽chain聽we聽are聽processing
聽聽聽聽聽*
聽聽聽聽聽*聽@exception聽IOException聽if聽an聽input/output聽error聽occurs
聽聽聽聽聽*聽@exception聽ServletException聽if聽a聽servlet聽error聽occurs
聽聽聽聽聽*/
聽聽聽聽public聽void聽doFilter(ServletRequest聽request,聽ServletResponse聽response,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽FilterChain聽chain)
聽聽聽聽throws聽IOException,聽ServletException聽{
聽聽聽聽聽聽聽聽//聽Conditionally聽select聽and聽set聽the聽character聽encoding聽to聽be聽used
聽聽聽聽聽聽聽聽if聽(ignore聽||聽(request.getCharacterEncoding()聽==聽null))聽{
聽聽聽聽聽聽聽聽聽聽聽聽String聽encoding聽=聽selectEncoding(request);
聽聽聽聽聽聽聽聽聽聽聽聽if聽(encoding聽!=聽null)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽request.setCharacterEncoding(encoding);
聽聽聽聽聽聽聽聽}
聽聽聽聽//聽Pass聽control聽on聽to聽the聽next聽filter
聽聽聽聽聽聽聽聽chain.doFilter(request,聽response);
聽聽聽聽}
聽聽聽聽/**
聽聽聽聽聽*聽Place聽this聽filter聽into聽service.
聽聽聽聽聽*
聽聽聽聽聽*聽@param聽filterConfig聽The聽filter聽configuration聽object
聽聽聽聽聽*/
聽聽聽聽public聽void聽init(FilterConfig聽filterConfig)聽throws聽ServletException聽{
聽聽聽聽this.filterConfig聽=聽filterConfig;
聽聽聽聽聽聽聽聽this.encoding聽=聽filterConfig.getInitParameter(\"encoding\");
聽聽聽聽聽聽聽聽String聽value聽=聽filterConfig.getInitParameter(\"ignore\");
聽聽聽聽聽聽聽聽if聽(value聽==聽null)
聽聽聽聽聽聽聽聽聽聽聽聽this.ignore聽=聽true;
聽聽聽聽聽聽聽聽else聽if聽(value.equalsIgnoreCase(\"true\"))
聽聽聽聽聽聽聽聽聽聽聽聽this.ignore聽=聽true;
聽聽聽聽聽聽聽聽else聽if聽(value.equalsIgnoreCase(\"yes\"))
聽聽聽聽聽聽聽聽聽聽聽聽this.ignore聽=聽true;
聽聽聽聽聽聽聽聽else
聽聽聽聽聽聽聽聽聽聽聽聽this.ignore聽=聽false;
聽聽聽聽}
聽聽聽聽//聽------------------------------------------------------聽Protected聽Methods
聽聽聽聽/**
聽聽聽聽聽*聽Select聽an聽appropriate聽character聽encoding聽to聽be聽used,聽based聽on聽the
聽聽聽聽聽*聽characteristics聽of聽the聽current聽request聽and/or聽filter聽initialization
聽聽聽聽聽*聽parameters.聽聽If聽no聽character聽encoding聽should聽be聽set,聽return
聽聽聽聽聽*聽<code>null</code>.
聽聽聽聽聽*聽<p>
聽聽聽聽聽*聽The聽default聽implementation聽unconditionally聽returns聽the聽value聽configured
聽聽聽聽聽*聽by聽the聽<strong>encoding</strong>聽initialization聽parameter聽for聽this
聽聽聽聽聽*聽filter.
聽聽聽聽聽*
聽聽聽聽聽*聽@param聽request聽The聽servlet聽request聽we聽are聽processing
聽聽聽聽聽*/
聽聽聽聽protected聽String聽selectEncoding(ServletRequest聽request)聽{
聽聽聽聽聽聽聽聽return聽(this.encoding);
聽聽聽聽}
}//EOC
鍔犱笂榪欎釜鍚庯紝鍦╝ction涓氨鍙互鐩存帴浠巉orm涓帴鏀秅b2312緙栫爜鐨勬暟鎹簡錛岃繑鍥炴椂鑷劧涔熸槸gb2312浜嗐?br />浣嗘槸榪欎釜濂藉儚闇瑕乻ervlet聽2.2浠ヤ笂鐨勫鍣?br />
緇煎悎涓婇潰鐨勬柟娉曪紝鎴戣В鍐充簡struts涓殑涓枃闂錛岀幇鍦ㄨ繕娌″彂鐜版柊鐨勯棶棰樸?/font>
1銆佲淣o bean found under attribute key XXX鈥?br />鍦╯truts-config.xml閲屽畾涔変簡涓涓狝ctionForm錛屼絾type灞炴ф寚瀹氱殑綾諱笉瀛樺湪錛宼ype灞炴х殑鍊煎簲璇ユ槸Form綾葷殑鍏ㄥ悕銆傛垨鑰呮槸錛屽湪Action鐨勫畾涔変腑錛宯ame鎴朼ttribute灞炴ф寚瀹氱殑ActionForm涓嶅瓨鍦ㄣ?br />
2銆佲淐annot find bean聽XXX in any scope鈥?/strong>
鍦ˋction閲屼竴鑸細request.setAttribute()涓浜涘璞★紝鐒跺悗鍦ㄨ漿鍚戠殑jsp鏂囦歡閲岋紙鐢╰ag鎴杛equest.getAttribute()鏂規硶錛夊緱鍒拌繖浜涘璞″茍鏄劇ず鍑烘潵銆傝繖涓紓甯告槸璇磈sp瑕佸緱鍒頒竴涓璞★紝浣嗗墠闈㈢殑Action閲屽茍娌℃湁灝嗗璞¤緗埌request錛堜篃鍙互鏄痵ession銆乻ervletContext錛夐噷銆?br />鍙兘鏄悕瀛楅敊浜嗭紝璇鋒鏌sp閲岀殑tag鐨勪竴鑸槸name灞炴э紝鎴杇etAttribute()鏂規硶鐨勫弬鏁板鹼紱鎴栬呮槸Action閫昏緫鏈夐棶棰樻病鏈夋墽琛宻etAttribute()鏂規硶灝卞厛杞悜浜嗐?br />榪樻湁鍙﹀涓涓彲鑳斤紝綰補鏄痡sp鏂囦歡鐨勯棶棰橈紝渚嬪<logic:iterate>浼氭寚瀹氫竴涓猧d鍊鹼紝鐒跺悗鍦ㄥ驚鐜噷<bean:write>浣跨敤榪欎釜鍊間綔涓簄ame鐨勫鹼紝濡傛灉榪欎袱涓間笉鍚岋紝涔熶細鍑虹幇姝ゅ紓甯搞傦紙閮芥槸涓涓亾鐞嗭紝request閲屾病鏈夊搴旂殑瀵硅薄銆傦級
3銆佲淢issing message for key "XXX"鈥?/strong>
緙哄皯鎵闇鐨勮祫婧愶紝媯鏌pplicationResources.properties鏂囦歡閲屾槸鍚︽湁jsp鏂囦歡閲岄渶瑕佺殑璧勬簮錛屼緥濡傦細
聽
聽
榪欒浠g爜浼氭壘msg.name.prompt璧勬簮錛屽鏋淎ppliationResources.properties閲屾病鏈夎繖涓祫婧愬氨浼氬嚭鐜版湰寮傚父銆傚湪浣跨敤澶氭ā鍧楁椂錛岃娉ㄦ剰鍦ㄦā鍧楃殑struts-config-xxx.xml閲屾寚瀹氳浣跨敤鐨勮祫婧愭枃浠跺悕縐幫紝鍚﹀垯褰撶劧浠涔堣祫婧愪篃鎵句笉鍒幫紝榪欎篃鏄竴涓緢瀹規槗鐘殑閿欒銆?/p>
4銆佲淣o getter method for property聽XXX of bean teacher鈥?/strong>
5銆佲淐annot find ActionMappings or ActionFormBeans collection鈥?br />寰呰В鍐熾?/p>
6銆佲淐annot retrieve mapping for action XXX鈥?br />鍦?jsp鐨?lt;form>鏍囩閲屾寚瀹歛ction='/XXX'錛屼絾榪欎釜Action騫舵湭鍦╯truts-config.xml閲岃緗繃銆?/p>
7銆丠TTP Status 404 - /xxx/xxx.jsp
8銆佹病鏈変換浣曞紓甯鎬俊鎭紝鏄劇ず絀虹櫧欏甸潰
9銆佲淭he element type "XXX" must be terminated by the matching end-tag "XXX".鈥?br />榪欎釜鏄痵truts-config.xml鏂囦歡鐨勬牸寮忛敊璇紝浠旂粏媯鏌ュ畠鏄惁鏄壇鏋勭殑xml鏂囦歡錛屽叧浜巟ml鏂囦歡鐨勬牸寮忚繖閲屽氨涓嶈禈榪頒簡銆?/p>
10銆佲淪ervlet.init() for servlet action threw exception鈥?/strong>
11銆佲淩esources not defined for Validator鈥?/strong>
涓婇潰榪欎簺鏄垜鍦ㄧ敤Struts鍋氶」鐩椂閬囧埌榪囩殑闂錛屽叾涓竴浜涙浘鍥扮粫鎴戜笉灝戞椂闂達紝鍏跺疄澶ч儴鍒嗛兘鏄嚜宸變笉緇嗗績閫犳垚鐨勩傚笇鏈涜繖綃囨枃绔犺兘瀵逛綘鐨勫紑鍙戞湁鎵甯姪錛屽茍嬈㈣繋緇х畫琛ュ厖銆?br />
榪欐潯寮傚父淇℃伅璇村緱寰堟槑鐧斤紝jsp閲岃鍙栦竴涓猙ean鐨勫睘鎬у嚭鏉ワ紝浣嗚繖涓猙ean騫舵病鏈夎繖涓睘鎬с備綘搴旇媯鏌sp涓煇涓爣絳劇殑property灞炴х殑鍊箋備緥濡備笅闈唬鐮佷腑鐨刢ade搴旇鏀逛負code鎵嶅錛?/p>
<
bean:write聽name
=
"
teacher
"
聽property
=
"
cade
"
聽filter
=
"
true
"
/>
Forward鐨刾ath灞炴ф寚鍚戠殑jsp欏甸潰涓嶅瓨鍦紝璇鋒鏌ヨ礬寰勫拰妯″潡錛屽浜庡悓涓妯″潡涓殑Action杞悜錛宲ath涓笉搴斿寘鍚ā鍧楀悕錛涙ā鍧楅棿杞悜錛岃浣忎嬌鐢╟ontextRelative="true"銆?/p>
鍙兘鏄疉ction閲屼嬌鐢ㄧ殑forward涓巗truts-config.xml閲屽畾涔夌殑forward鍚嶇О涓嶅尮閰嶃?br />
涓鑸嚭鐜拌繖縐嶅紓甯稿湪鍚庨潰浼氭樉紺轟竴涓叧浜嶢ctionServlet鐨勫紓甯稿爢鏍堜俊鎭紝鍏朵腑鎸囧嚭浜嗗紓甯稿叿浣撳嚭鐜板湪浠g爜鐨勫摢涓琛屻傛垜鏇劇粡閬囧埌鐨勪竴嬈℃彁紺哄涓嬶細
java.lang.NullPointerException
聽聽聽聽at聽org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:
1003
)
聽聽聽聽at聽org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:
955
)
涓鴻В鍐抽棶棰橈紝鍏堜笅杞絪truts鐨勬簮鐮佸寘錛岀劧鍚庡湪ActionServlet.java鐨勭1003琛屾彃鍏ユ柇鐐癸紝騫跺鍚勫彉閲忚繘琛岀洃瑙嗐傚緢涓漢錛屾垜绔熺劧鎶妔truts-config.xml鏂囦歡寮勪涪浜嗭紝鍥犳鍑虹幇浜嗕笂闈㈢殑寮傚父錛屽簲璇ユ槸鍜孋VS鍚屾鏃朵笉灝忓績鍒犻櫎鐨勩?/p>
榪欎釜鏄埄鐢╒alidator鎻掍歡鍋氶獙璇佹椂鍙兘鍑虹幇鐨勫紓甯革紝榪欐椂浣犺媯鏌alidation.xml鏂囦歡錛岀湅閲岄潰浣跨敤鐨勮祫婧愭槸鍚︾‘瀹炴湁瀹氫箟錛宖orm鐨勫悕縐版槸鍚︽紜紝絳夌瓑銆?/p>
12.Struts緙栬瘧涓嚭鐜扳渃annot find actionmappings or actionformbeans collection鈥濇彁紺虹殑鍘熷洜錛?br />
灝戜簡涓涓?lt;load-on-startup>0</load-on-startup>
榪欐牱寮濮嬫槸娌℃湁鍔犺澆榪欎釜綾伙紝灝辨病鏈夊垵濮嬪寲struts-config.xml錛屾墍浠ユ壘涓嶅埌
actionmappings or actionformbeans collection銆?br />
涔熸湁鍙兘瀵艱嚧榪欎釜闂錛屼粠stuts渚嬪瓙閲岄潰鎷瘋繃鏉ュ氨濂戒簡銆俿truts1.1鑷甫鍏?0涓猨ar鍖呫?br />
鏈夊彲鑳紸ction鍜孎ormbean娌℃湁緙栬瘧錛屼篃浼氭湁榪欎釜闂錛屾鏌ヤ竴涓嬫湁娌℃湁瀵瑰簲鐨刢lass鏂囦歡灝卞ソ銆俢lass璺緞涓嶅鍙兘涔熶細瀵艱嚧榪欎釜闂銆?br />
鐢ㄧ殑servlet瀹瑰櫒鍜宻truts鐗堟湰涓嶅鎴栬繖涓や釜鐗堟湰鍗忚皟鏈夐棶棰樸?br />鍦ㄤ互涓婂嚑鏉¢兘涓嶈兘瑙e喅闂鐨勬儏鍐典笅錛屽彲鑳藉氨鏄増鏈殑闂浜嗭紝鎹釜楂樼増鏈瘯璇曞惂
]]>