try {
XXX
} catch (Exception e) {
Super.addFieldError(“username”, “输入有误”);
或者:
Super.addActionError(“输入有误”);
}
感兴‘£å¯ä»¥ç ”½I¶ä¸€ä¸‹æºç ,使用时我们åªéœ€è¦åœ¨™åµé¢æ˜„¡¤º˜q™äº›é”™è¯¯ž®?/span>OKã€?/span>
如:
<s:fielderror>
<s:param>username</s:param>
</s:fielderror>
或�/span>
<s:actionerror/>
但是在实际应用ä¸åQ?/span>fielderror我们比较們֑于有针对性的错误信æ¯è¾“出åQŒå› ä¸?/span>fielderror它本íw«å°±æ˜¯ä¸ªMapåQŒå¯ä»¥è¯¦¾l†æŒ‡å®šé”™è¯¯çš„å—æ®µ-åŽŸå› ã€‚è€Œä¸”åœ¨è¡¨å•æäº¤æ—¶æ›´åˆé€‚,åªè¦å¯¹åº”äº?/span>errorå—æ®µå’Œæäº¤å±žæ€§çš„å—æ®µã€?/span>Struts2ä¼šäØ“æˆ‘ä»¬è‡ªåŠ¨è¡¨æ ¼æŽ’ç‰ˆ(没试éª?/span>)
修改主题:<s:form theme="simple"> ä¸èƒ½æ˜„¡¤ºé”™è¯¯ä¿¡æ¯,ä¸èƒ½è‡ªåЍæ·ÕdŠ è¡¨æ ¼æŽ’ç‰ˆ,æ ÒŽ®éœ€è¦è‡ªå·±å‘æŒ?/span>
注:我们åªéœ€è¦è¿›è¡Œè®¾¾|?/span>error的默è®?/span>inputåQ?/span>Struts2ä¼šäØ“æˆ‘ä»¬è‡ªåŠ¨˜q›è¡Œè§†å›¾è½¬å‘åQ?/span><result name=”input”>/input.jsp</result>
strutsæä¾›ä¸¤ç§æ–¹å¼è®‰K—®sessionå’?/span>requeståQŒå…¶ä¸æ¯”较常用的是利ç”?/span>SPRINGé‡Œé¢æ‰€è¯´çš„IOCåÏxŽ§åˆ¶åè½?/span>
IOCæ–¹å¼åQ?/span>
action¾cÕd®žçŽ?/span>ServletRequestAware接å£åQŒåƈ新å¾ä¸€ä¸?/span>HttpServletRequest request
public class UserLoginAction extends ActionSupport implements ServletRequestAware {
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
ç„¶åŽå¯ä»¥ç”Ÿæˆçš?/span>request得到对象åQŒå¦‚request.getRemoteAddr()
action¾cÕd®žçŽ?/span>SessionAware接å£åQŒåƈ创å¾ä¸€ä¸?/span>MAP对象session
public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public void setSession(Map session) {
this.session=session;
}
é?/span>Iocæ–¹å¼
˜q™ç§æ–¹å¼ä¸»è¦æ˜¯åˆ©ç”¨äº†com.opensymphony.xwork2.ActionContext¾cÖM»¥å?/span>org.apache.struts2.ServletActionContext¾c»ï¼Œå…·ä½“的方法如下所½Cºã€?/span>
获得request对象åQ?/span>
A. HttpServletRequest request = ServletActionContext.getRequest ();
BåQ?/span>ActionContext ct = ActionContext.getContext()
HttpServletRequest request = (HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST );
获得session对象åQ?/span>
åœ?/span>Struts2ä¸åº•层的session都被ž®è£…æˆäº†Map¾cÕdž‹åQŒæˆ‘ä»¬ç§°ä¹‹äØ“SessionMapåQŒè€Œåã^常我们所说的session则是æŒ?/span>HttpSession对象åQŒå…·ä½“的获得æ–ÒŽ³•如下所½Cºã€?/span>
AåQ?/span>Map session = ActionContext.getSession();
BåQ?/span>Map session = (Map)ActionContext.getContext().get(ActionContext.SESSION);
得到˜q™ä¸ªSessionMapä¹‹åŽæˆ‘们ž®±å¯ä»¥å¯¹session˜q›è¡Œè¯Õd†™äº†ï¼Œå¦‚果我们惛_¾—到原始的HttpSessionå¯ä»¥é¦–先得到HttpServletRequest对象åQŒç„¶åŽé€šè¿‡request.getSession()æ¥å–得原始的HttpSession对象。一般情况下SessionMapå·²ç»å¯ä»¥å®Œæˆæ‰€æœ‰çš„工作åQŒæˆ‘们ä¸å¿…å†åŽÈ¢°åº•层çš?/span>session了ã€?/span>
AåQ?
<s:a xhref=""></s:a>-----‘…链接,¾cÖM¼¼äºŽhtml里的<a></a>
<s:action name=""></s:action>-----执行一个view里é¢çš„一个action
<s:actionerror/>-----如果actionçš„errors有值那么显½Cºå‡ºæ?
<s:actionmessage/>-----如果actionçš„message有值那么显½Cºå‡ºæ?
<s:append></s:append>-----æ·ÕdŠ ä¸€ä¸ªå€¼åˆ°liståQŒç±»ä¼égºŽlist.add();
<s:autocompleter></s:autocompleter>-----自动完æˆ<s:combobox>æ ‡ç¾çš„内容,˜q™ä¸ªæ˜¯ajax
BåQ?
<s:bean name=""></s:bean>-----¾cÖM¼¼äºŽstruts1.xä¸çš„åQŒJavaBeançš„å€?
CåQ?
<s:checkbox></s:checkbox>-----å¤é€‰æ¡†
<s:checkboxlist list=""></s:checkboxlist>-----多选框
<s:combobox list=""></s:combobox>-----下拉�
<s:component></s:component>-----囑փ½W¦å·
DåQ?
<s:date/>-----èŽ·å–æ—¥æœŸæ ¼å¼
<s:datetimepicker></s:datetimepicker>-----日期输入�
<s:debug></s:debug>-----昄¡¤ºé”™è¯¯ä¿¡æ¯
<s:div></s:div>-----表示一个å—åQŒç±»ä¼égºŽhtmlçš?lt;div></div>
<s:doubleselect list="" doubleName="" doubleList=""></s:doubleselect>-----åŒä¸‹æ‹‰æ¡†
EåQ?
<s:if test=""></s:if>
<s:elseif test=""></s:elseif>
<s:else></s:else>-----˜q?ä¸ªæ ‡½{¾ä¸€èµ·ä‹É用,表示æ¡äšg判æ–
FåQ?
<s:fielderror></s:fielderror>-----昄¡¤ºæ–‡äšg错误信æ¯
<s:file></s:file>-----æ–‡äšg上ä¼
<s:form action=""></s:form>-----获å–相应formçš„å€?
GåQ?
<s:generator separator="" val=""></s:generator>----å’?lt;s:iterator>æ ‡ç¾ä¸€èµ·ä‹Éç”?
HåQ?
<s:head/>-----åœ?lt;head></head>里ä‹É用,表示头文件结æ?
<s:hidden></s:hidden>-----éšè—å€?
IåQ?
<s:i18n name=""></s:i18n>-----åŠ è²èµ„æºåŒ…åˆ°å€¼å †æ ?
<s:include value=""></s:include>-----包å«ä¸€ä¸ªè¾“出,servlet或jsp™åµé¢
<s:inputtransferselect list=""></s:inputtransferselect>-----获å–form的一个输å…?
<s:iterator></s:iterator>-----用于é历集åˆ
LåQ?
<s:label></s:label>-----åªè¯»çš„æ ‡½{?
MåQ?
<s:merge></s:merge>-----åˆåƈé历集åˆå‡ºæ¥çš„å€?
OåQ?
<s:optgroup></s:optgroup>-----èŽ·å–æ ‡ç¾¾l?
<s:optiontransferselect doubleList="" list="" doubleName=""></s:optiontransferselect>-----å·¦å³é€‰æ‹©æ¡?
PåQ?
<s:param></s:param>-----ä¸ºå…¶ä»–æ ‡½{¾æä¾›å‚æ•?
<s:password></s:password>-----密ç 输入æ¡?
<s:property/>-----得到'value'的属�
<s:push value=""></s:push>-----value的值pushåˆ°æ ˆä¸?从而ä‹Épropertyæ ‡ç¾çš„能够获å–value的属æ€?
RåQ?
<s:radio list=""></s:radio>-----å•选按é’?
<s:reset></s:reset>-----é‡ç½®æŒ‰é’®
SåQ?
<s:select list=""></s:select>-----å•选框
<s:set name=""></s:set>-----赋予å˜é‡ä¸€ä¸ªç‰¹å®šèŒƒå›´å†…çš„å€?
<s:sort comparator=""></s:sort>-----通过属性给list分类
<s:submit></s:submit>-----æäº¤æŒ‰é’®
<s:subset></s:subset>-----为é历集åˆè¾“出åé›?
TåQ?
<s:tabbedPanel id=""></s:tabbedPanel>-----è¡¨æ ¼æ¡?
<s:table></s:table>-----è¡¨æ ¼
<s:text name=""></s:text>-----I18n文本信æ¯
<s:textarea></s:textarea>-----文本域输入框
<s:textfield></s:textfield>-----文本输入�
<s:token></s:token>-----拦截�
<s:tree></s:tree>-----æ ?
<s:treenode label=""></s:treenode>-----æ ‘çš„¾l“æž„
UåQ?
<s:updownselect list=""></s:updownselect>-----多选择�
<s:url></s:url>-----创å¾url
2.Framework的概�br />
框架是ähä»¬ç”¨äºŽè§£å†³ç›¸åŒæˆ–者相似类型问题的æ–ÒŽ¡ˆ
特点åQšå¯é‡ç”¨æ€§ï¼Œå¯æ‰©å±•æ€§ï¼Œå¯æ”¶¾~©æ€§ã€‚基于请求å“应(request-responseåQ‰æ¨¡å¼çš„应用Framework的逻辑¾l“æž„
控制器:Controller
业务逻辑层:Business Logic
æ•°æ®é€»è¾‘层:Data Logic
3.Struts的概念和体系¾l“æž„
Struts是Apache¾l„织的一个开æºé¡¹ç›®ï¼Œä¸»è¦æ˜¯é‡‡ç”¨Servletå’ŒJSP技术æ¥å®žçްçš?br />
Struts是一个基于Sun JavaEEòq›_°çš„MVC框架åQŒå®ƒé‡‡ç”¨MVC模å¼åQŒå°†MVC模å¼åˆ†ç¦»æ˜„¡¤ºé€»è¾‘å’Œä¸šåŠ¡é€»è¾‘çš„èƒ½åŠ›ï¼Œå‘æŒ¥çš„æ·‹æ¼“å°½è‡?br />
(Struts is a flexible control layer based on standard technologies like Java Servlets,JavaBeans,ResourceBundles,and XML,as well as various Jakarta Commons packages,like BeanUtils and Chain of Responsibility.The frameword helps you create an extensible developmnt environment for your application,based on published standards and proven design patterns)
4.Struts的实跉|¥éª?br />
æ¥éª¤ä¸€åQšæå»ºçޝå¢?br />
a.导入jar包,使用其ä¸çš„ç±»
b.建立一个酾|®æ–‡ä»Óž¼Œstruts=config.xml
方便struts用户使用
一般在WEB=INF�br />
c.修改web.xml
注册strutsä¸å¿ƒæŽ§åˆ¶å™?--ActionServlet
æ¥éª¤äºŒï¼šå»ºç«‹ActionForm
æ¥éª¤ä¸‰ï¼šå»ºç«‹Action
建立一个类åQŒç‘ô承ActionåQŒè¦†ç›–executeæ–ÒŽ³•
注册åQŒä¿®æ”šw…¾|®æ–‡ä»¶struts-config.xml
pathåQšæŒ‡æ˜Žè°ƒç”¨è€…ï¼ˆjspåQ‰èƒ½é€šè¿‡ä¸å¿ƒæŽ§åˆ¶å™¨ActionServlet扑ֈ°è¯¥Action
typeåQšæŒ‡æ˜Žè¯¥action¾cÕd…¨å?br />
nameåQšè¯¥action引用的formçš„å¿U?/p>
æ¥éª¤å››ï¼š™åµé¢è®‰K—®
5.Struts的工作原ç?br />
6.Struts的组�br />
7.Struts的酾|®æ–‡ä»¶ç®€ä»?br />
8.Strutsæ ‡è®°åº?br />
9.å¼‚å¸¸å¤„ç†æ¡†æž¶
10.æ ¡éªŒæ¡†æž¶
11.高çñ”ç‰ÒŽ€?br />
12.Struts优缺�br />
优点åQ?br />
  Strutsè·ŸTomcatã€Turbine½{‰è¯¸å¤šApache™å¹ç›®ä¸€æ øP¼Œæ˜¯å¼€æºèÊYä»Óž¼Œ˜q™æ˜¯å®ƒçš„一大优ç‚V€‚ä‹Éå¼€å‘者能更深入的了解其内部实现机制。除æ¤ä¹‹å¤–,Struts的优点主è¦é›†ä¸ä½“现在两个
æ–šw¢åQšTaglib和页é¢å¯¼èˆªã€‚Taglib是Strutsçš„æ ‡è®°åº“åQŒçµ‹zÕdŠ¨ç”¨ï¼Œèƒ½å¤§å¤§æé«˜å¼€å‘效率。å¦å¤–,ž®Þq›®å‰å›½å†…çš„JSPå¼€å‘者而言åQŒé™¤äº†ä‹É用JSPè‡ªå¸¦çš„å¸¸ç”¨æ ‡è®°å¤–åQŒå¾ˆž®‘å¼€å‘自å·Þqš„æ ?/p>
讎ͼŒæˆ–许Struts是一个很好的èµïL‚¹ã€?br />   关于™åµé¢å¯ÆDˆªåQŒæˆ‘们认为那ž®†æ˜¯ä»ŠåŽçš„一个å‘展方å‘,事实上,˜q™æ ·åšï¼Œä½¿ç³»¾lŸçš„è„‰ç»œæ›´åŠ æ¸…æ™°ã€‚é€šè¿‡ä¸€ä¸ªé…¾|®æ–‡ä»Óž¼Œå›_¯æŠŠæ¡æ•´ä¸ª¾pÈ»Ÿå„部分之间的è”ç³»åQŒè¿™å¯¹äºŽåŽæœŸçš„ç»´
护有ç€èŽ«å¤§çš„å¥½å¤„ã€‚å°¤å…¶æ˜¯å½“å¦ä¸€æ‰¹å¼€å‘者接手这个项目时åQŒè¿™¿Uä¼˜åŠ¿ä½“çŽ°å¾—æ›´åŠ æ˜Žæ˜¾ã€?/p>
¾~ºç‚¹åQ?br />   Taglib是Struts的一大优势,但对于åˆå¦è€…而言åQŒå´éœ€è¦ä¸€ä¸ªæŒ¾lå¦ä¹ çš„˜q‡ç¨‹åQŒç”šè‡Œ™¿˜ä¼šæ‰“乱我们网™å늼–å†™çš„ä¹ æƒ¯åQŒä½†æ˜¯ï¼Œå½“æˆ‘ä»¬ä¹ æƒ¯äº†å®ƒæ—¶åQŒæˆ‘们会觉得它真的很‹‚’ã€?/p>
Strutsž®†MVCçš„Controllerä¸€åˆ†äØ“ä¸‰ï¼Œåœ¨èŽ·å¾—ç»“æž„æ›´åŠ æ¸…æ™°çš„åŒæ—¶åQŒä¹Ÿå¢žåŠ äº†ç³»¾lŸçš„夿‚åº¦ã€‚æ¯«æ— ç–‘é—®ï¼Œè¦ç†è§?Struts 必须接å—一定的培è®ã€‚éšç€å˜åŒ–çš„ä¸æ–åŠ å…¥ï¼Œ˜q™æœ‰æ—¶ä¼šä»¤äh
很沮丧ã€?br />   Struts从äñ”生到现在˜q˜ä¸˜q?-4òq´æ—¶é—ß_¼Œž®±å·²é€æ¥‘Šæ¥‘Šå¤š˜q用于商业èÊY件。虽然它现在˜q˜æœ‰ä¸å°‘¾~ºç‚¹åQŒä½†å®ƒæ˜¯ä¸€¿Uéžå¸æ€¼˜¿U€çš„J2EE MVC实现方å¼åQŒå¦‚果我们的¾pÈ»Ÿå‡†å¤‡é‡‡ç”¨
J2EE MVCæž¶æž„åQŒé‚£ä¹ˆï¼Œä¸å¦¨è€ƒè™‘一下Strutsã€?br />   Struts 是一¿U基äº?Web çš?MVC 解决æ–ÒŽ¡ˆåQŒæ‰€ä»¥å¿…™åÈ”¨ HTMLã€JSP æ–‡äšgå’?servlet æ¥å®žçŽ°å®ƒåQŒStruts éœ€è¦æ”¯æŒ?JSP 1.1 å’?Servlet 2.2 规范çš?servlet 容器。å¦ä¹ ã€ç†
解和掌æ¡Struts是我们æ¯ä¸ªåŸºäºŽJ2EE软äšgå¼€å‘äh员一门必修的评¡¨‹åQŒä¹Ÿæ˜¯æˆ‘们对ä¼ä¸šJ2EE技术应用的˜q›ä¸€æ¥æ·±åŒ–ã€?/p>
/************************************************************************************************/
Struts的基本组件包
org.apache.struts.action
 基本上,控制整个struts frameworkçš„è¿è¡Œçš„æ ¸å¿ƒ¾c…R€ç»„仉™ƒ½åœ¨è¿™ä¸ªåŒ…ä¸ï¼Œæ¯”å¦‚æˆ‘ä»¬ä¸Šé¢æåˆ°çš„æŽ§åˆ¶å™¨ActionServlet。已¾lAction,ActionForm,ActionMapping½{‰ç‰ã€‚struts1.1æ¯?.0多了 DynaActionForm ¾c…R€‚å¢žåŠ äº†åŠ¨æ€æ‰©å±•生æˆFormBean功能
org.apache.struts.actions
 ˜q™ä¸ªåŒ…是主è¦ä½œç”¨æ˜¯æä¾›å®¢æˆïLš„httpè¯äh±‚和业务逻辑处ç†ä¹‹é—´çš„特定适é…器è{æ¢åŠŸèƒ½ï¼Œè€?.0版本ä¸çš„部分动æ€å¢žåˆ FromBean的类åQŒä¹Ÿåœ¨struts1.1ä¸è¢«Action包的DynaActionForm¾l„äšg所å–代
org.apache.struts.config
 æä¾›å¯šw…¾|®æ–‡ä»¶struts-config.xmlå…ƒç´ çš„æ˜ ž®„。这也是sturts1.1䏿–°å¢žçš„功能
org.apache.struts.util
 Strtutsä¸ÞZº†æ›´å¥½æ”¯æŒweb application的应用,体统了一个些常用æœåŠ¡çš„æ”¯æŒï¼Œæ¯”如Connection Poolå’ŒMessage Sourceã€?br />
org.apache.struts.taglib
 ˜q™ä¸æ˜¯ä¸€ä¸ªåŒ…åQŒè€Œæ˜¯æ˜¯ä¸€ä¸ªå®¢æˆäh ‡½{„¡±»çš„集åˆã€‚下é¢åŒ…括Bean TagsåQŒHTML TagsåQŒLogic TagsåQŒNested TagsåQŒTemplate Tags˜q™å‡ 个用于构建用æˆïL•Œé¢çš„æ ‡ç¾¾c…R€?
org.apache.struts.validator
 Struts1.1 frameworkä¸å¢žåŠ äº†validator frameworkåQŒç”¨äºŽåЍæ€çš„é…ç½®from表å•的验è¯ã€?/p>
/************************************************************************************************/
æ ¸å¿ƒStruts ¾cÕd’ŒMVC 的对åº?/p>
¾c?nbsp; æè¿°
ActionForward ç”¨æˆ·æŒ‡å‘æˆ–者视å›ùN€‰æ‹©
ActionForm çŠ¶æ€æ”¹å˜çš„æ•°æ®
ActionMapping çŠ¶æ€æ”¹å˜äº‹ä»?
ActionServlet 控制器,接å—用户è¯äh±‚å’ŒçŠ¶æ€æ”¹å˜ï¼Œä»¥åŠå‘出视图选择
Action 控制器的一部分åQŒäºŽæ¨¡åž‹äº¤äº’åQŒæ‰§è¡ŒçŠ¶æ€æ”¹å˜æˆ–çŠ¶æ€æŸ¥è¯¢ï¼Œ
以åŠå‘Šè¯‰ActionServlet 下一个选择的视å›?
/************************************************************************************************/
Struts 使用一些酾|®æ–‡ä»¶å’Œè§†å›¾åŠ©æ‰‹åQˆview helpersåQ‰æ¥æ²Ÿé€šæŽ§åˆ¶å™¨å’Œæ¨¡åž?br />
ApplicationResources.properties å˜å‚¨æœ¬åœ°åŒ–ä¿¡æ¯å’Œæ ‡ç¾åQŒä»¥ä½¿åº”用å¯ä»¥å›½é™…化
struts-config.xml å˜å‚¨æŽ§åˆ¶å™¨å¯¹è±¡çš„¾~ºçœé…ç½®åQŒåŒ…括模型支æŒçš„用户指å‘åQŒçŠ¶æ€æ”¹å˜ï¼ŒçŠ¶æ€æŸ¥è¯?
æ ‡è®°åº“æ˜q°ç¬¦ 目的
struts-html.tld 扩展HTML Formçš„JSPæ ‡è®°
struts-bean.tld 扩展处ç†JavaBeançš„JSPæ ‡è®°
struts-logic.tld 扩展‹¹‹è¯•属性值的JSPæ ‡è®°
/************************************************************************************************/
控制器组件的é…置框架ä¸çš„æŽ§åˆ¶å™¨ç»„件是有org.apache.struts.action.ActionServlet¾cÕd®žçŽ°çš„åQŒè¿™ä¸ªç±»æ˜¯javax.servlet.http.HttpServlet¾cÈš„扩展ã€?br />
ActionServleté…ç½®åQšæˆ‘ä»¬éœ€è¦åœ¨web.xmlä¸å£°æ˜ŽActionServletåQŒåƈ且将它酾|®æˆå¯åŠ¨æ—¶è¿›è¡ŒåŠ è½½ã€‚ä»¥ä¸‹äØ“å¯ä»¥é…置的åˆå§‹åŒ–傿•°åQ?br />
傿•° 默认å€?nbsp; æè¿°
application Null 应用½E‹åºçš„资æºé›†åˆçš„¾c?
bufferSize 4096 æ–‡äšgä¸Šä¼ çš„ç¼“å†²åŒºå¤§å°
config /WEB-INF/struts-config.xml é…置文äšg的佾|®å’Œåç§°
content Text/html 默认的内容类�
debug 0 ½E‹åºè°ƒè¯•çš„çñ”åˆ?
detail 0 ½E‹åºè°ƒè¯•¾l†èŠ‚çš„çñ”åˆ?
factory Null 消æ¯èµ„æºå·¥åŽ‚åQŒç”¨äºŽå›½é™…化ä¸è§£é‡Šæ¶ˆæ¯èµ„æº?
formBean org.apache.struts.action.ActionFormBean ž®è£…ActionForm beanä¿¡æ¯çš„类的å¿U?
forward Org.apache.struts.action.ActionForward ž®è£…ActionForward对象信æ¯çš„类的å¿U?
locale True 为true,ž®†åœ¨ç”¨æˆ·ä¼šè¯ä¸å˜å‚¨ä¸€ä¸ªæœ¬åœ°å¯¹è±?
mapping Org.apache.struts.action.ActionForward ž®è£…ActionMappingä¿¡æ¯çš„类的å¿U?
maxFileSize 250M ä¸Šä¼ æ–‡äšg的最大尺å¯?
multipartClass Org.apache.struts.action.ActionForward 处ç†å¤šéƒ¨åˆ†è¯·æ±‚çš„¾cÈš„åç§°
noCache False HTTPæ ‡å¤´æ˜¯å¦è¦è®¾¾|®äØ“¼›æ¢¾~“寸
Null True 讄¡½®ä¸ºtrueåQŒå¯¹äºŽæ— 效的信æ¯å…³é”®å—å°†˜q”回null
tempDir ä½œäØ“ä¸€ä¸ªservlet傿•°æä¾›¾l™ç¨‹åºçš„工作目录 处ç†ä¸‹è²æ–‡äšg是ä‹É用的临时工作目录
validate True 是å¦ä½¿ç”¨æ–°æ ¼å¼çš„é…置文äšg
vallidating True 是å¦å¯šw…¾|®æ–‡ä»¶è¿›è¡Œæœ‰æ•ˆæ€§åˆ†æž?