動作映射

          Posted on 2006-07-05 08:07 多力宇揚 閱讀(1160) 評論(5)  編輯  收藏 所屬分類: STRUTS

          動作映射

          這個時候,你可能會問自己:“當控制器接受到一個請求的時候,它如何知道調(diào)用哪個Action實例?”控制器要通過查看請求消息并使用一組動作
          映射(action mapping)來做出決定。動作映射是Struts配置信息(配置一個特殊的XML文件中)的一部分。這個配置信息會在啟動時加載到內(nèi)存中
          ,讓Struts框架得以在運行時加以利用。每個action元素在內(nèi)存中都被表示為org.apache.struts.action.ActionMapping類的實例。
          ActionMapping對象包含一個path屬性,用來與外部請求的URI部分匹配。如下:
          <action
          ??? path="/login"
          ??? type="com.oreilly.struts.banking.action.LoginAction"
          ??? scope="request"
          ??? name="loginForm"
          ??? validate="true"
          ??? input="/login.jsp"
          ??? <forward name="Success" path="/action/getaccountinformation" redirect="true"/>
          ??? <forward name="Failure" path="/login.jsp" redirect="true"/>
          </action>
          這里的登錄動作映射把路徑"/login"映射到了com.oreilly.struts.banking.LoginAction這個Action類。無論何時,當控制器接受到一個URI
          路徑中包含"/login"字符串的請求時,就會調(diào)用LoginAction實例的execute()方法。Struts框架還會使用映射來指出“動作"完成后要讓用戶
          轉(zhuǎn)向哪個資源。

          ?

          使用Struts ActionForm

          Struts框架的ActionForm對象可用來在用戶和業(yè)務(wù)層之間傳輸客戶的輸入數(shù)據(jù)。Struts框架會自動從請求中收集輸入數(shù)據(jù),再將這些數(shù)據(jù)交給
          一個使用表單bean(form bean)的Action對象,接著表單再交給業(yè)務(wù)層。為了把表示層和業(yè)務(wù)層分離開來,你不應(yīng)該直接把ActionForm對象交
          給業(yè)務(wù)層,而是應(yīng)該使用由ActionForm對象得到的數(shù)據(jù)創(chuàng)建適當?shù)腄TO。下面的步驟說明了Struts框架如何處理每個請求相應(yīng)的ActionForm對
          象:
          ?
          ? 1.檢查該項動作的相應(yīng)設(shè)置,查看是否已經(jīng)有某個ActionForm得到配置。
          ? 2.如果對應(yīng)這個動作配置了某個ActionForm,則使用action元素中的name屬性來查找表單bean的配置信息。
          ? 3.查看是否已經(jīng)創(chuàng)建了一個ActionForm的一個實例。
          ? 4.如果在適當?shù)淖饔糜騼?nèi)已經(jīng)存在一個ActionForm實例,而且這個實例的類型正是這個請求所需要的類型,則重用這個實例。
          ? 5.否則,創(chuàng)建所需ActionForm的一個新實例,并存儲在適當?shù)淖饔糜蛑校ㄓ蒩ction元素的scope屬性設(shè)置)。
          ? 6.調(diào)用ActionForm實例的reset()方法。
          ? 7.反復(fù)處理請求參數(shù),如果參數(shù)名在ActionForm實例中具有對應(yīng)的設(shè)置方法(setter method),就為它填上該請求參數(shù)的值。
          ? 8.最后,如果validate屬性的值設(shè)置為true,則調(diào)用ActionForm實例的validate()方法,并返回所出現(xiàn)的任何錯誤。
          對任何HTML頁面而言,如果表單數(shù)據(jù)是以POST方法傳輸?shù)模蛻?yīng)該使用ActionForm。必要時,相同的ActionForm可以同時給多個頁面使用,只
          要HTML字段能和ActionForm對象的屬性(property)匹配就可以了。
          Struts框架所提供的ActionForm類實現(xiàn)了多個方法,但到目前為止,最重要的兩個方法就是reset()和validate():
          ? public void reset(ActionMapping mapping,HttpServletRequest request);
          ? public ActionErrors validate(ActionMapping mapping,HttpServletRequest request);
          在Struts ActionForm類中,這兩個方法的默認實現(xiàn)是不完成任何的邏輯。你必須在自己的ActionForm類中覆蓋這兩個方法。控制器以請求中的
          值來填寫ActionForm實例之前,會先調(diào)用reset()方法。reset()方法給了ActionForm一個機會,可將其屬性設(shè)置為原來默認的狀態(tài)。這一點非
          常重要,因為表單bean實例可能會由多個請求共享或者由好幾個不同的線程所存取。不過,如果你是讓好幾頁共享一個ActionForm實例,可能
          不會去想去實現(xiàn)reset()方法,這樣一來只要這個實例還在,屬性的值就不會被重新設(shè)置。另一種做法就是實現(xiàn)你自己的resetFields()方法,
          在成功更新業(yè)務(wù)之后,就從這個Action類來調(diào)用此方法。
          當請求中所攜帶的值已經(jīng)插入到ActionFrom實例之后,控制器就回調(diào)用validate()方法。ActionForm應(yīng)該對輸入數(shù)據(jù)完成必要的驗證工作,然
          后向控制器返回所檢測到的任何錯誤。業(yè)務(wù)邏輯驗證應(yīng)該在業(yè)務(wù)對象中而不是在ActionForm中來完成。在ActionForm中所進行的驗證工作,只
          是表示的驗證而已。
          一旦寫好ActionForm類后,你必須通知Struts應(yīng)用程序有這些ActionForm存在,告訴Struts應(yīng)用程序哪個動作映射應(yīng)該使用哪個ActionForm。
          這是在配置文件中設(shè)置的。第一步是為你的應(yīng)用程序在配置文件中的form-beans段里配置所有的ActionForm。看下面的一個例子:
          ?<form-beans>
          ??? <form-bean
          ?????? name="loginForm"
          ?????? type="com.oreilly.struts.banking.form.LoginForm"/>
          ??? <form-bean
          ?????? name="accountInformationForm"
          ?????? type="org.apache.struts.action.DynaActionForm">
          ?????? <form-property name="accounts" type="java.util.ArrayList"/>
          ??? </form-bean>
          ?</form-beans>
          每個表單bean的name屬性必須都是獨一無二的,而且其type屬性必須定義一個Java類(擴展了Struts ActionForm類)的完全限定名。下一步
          是在一個或多個action元素中使用在form-benas段里的某個form-bean名。如下:
          ? <action
          ??? path="/login"
          ??? type='com.oreilly.struts.banking.action.LoginAction"
          ??? scope="request"
          ??? name="loginForm"
          ??? validate="true"
          ??? input="/login.jsp">
          ??? <forward name="Success" path="/action/getaccountinformation" redirect="ture>
          ??? <forward name="Failure" path="/login.jsp" redirect="true"/>
          ? </action>
          注意:登錄動作映射的name正好和前面form-beans段里某個name屬性相匹配。

          ?


          ?

          Feedback

          # re: 動作映射  回復(fù)  更多評論   

          2010-02-08 11:26 by Fk30Krista
          At the <a href="http://www.essaysexperts.com">writing service</a> is so easy to find information and <a href="http://www.essaysexperts.com">essay writing</a> referring to this good topic . To make better your academic career <a href="http://www.essaysexperts.com">buy an essay</a> and use your time of rest!

          # re: 動作映射  回復(fù)  更多評論   

          2012-04-25 12:49 by evaluation essays
          As I searched the web for online writing services I hit upon various Internet pages that suggested custom biology essays.

          # payday cash  回復(fù)  更多評論   

          2012-06-22 00:54 by payday cash
          hsqymzj http://paydaylaonsffb.co.uk/ payday cash

          # payday loans online  回復(fù)  更多評論   

          2012-07-03 02:43 by payday loans online
          hkicsxno http://paydaylaonsffg.co.uk/ payday loans online

          # payday loans  回復(fù)  更多評論   

          2012-09-26 09:11 by payday loans
          dsrrwiu http://ukpaydayloansff.co.uk/ payday loans

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 安义县| 通江县| 保德县| 梅河口市| 白朗县| 明溪县| 闸北区| 图们市| 喀喇沁旗| 全南县| 丹东市| 临夏市| 宜昌市| 辽源市| 西宁市| 大英县| 苏尼特左旗| 资溪县| 策勒县| 长宁区| 郴州市| 南宫市| 盱眙县| 吴忠市| 章丘市| 忻城县| 澳门| 临朐县| 无为县| 广汉市| 平利县| 日喀则市| 泽州县| 卢龙县| 岳普湖县| 大化| 普洱| 永州市| 确山县| 桦甸市| 澎湖县|