JpetStore中的Action與普通Struts的Action處理方式不一樣。遍歷JpetStore的src文件夾,并無一個具體的Action,那么它是如何來完成普通Struts的Action工作了?
查看JpetStore的Struts.xml可以發(fā)現(xiàn),它的Action只有一個,即“org.apache.stuts.beanaction.Beanaction”。通過Eclipse查看beanaction.jar的源代碼,可以發(fā)現(xiàn)Beanaction繼承與普通Action,即具備普通的action的功能。那么它無具體Action的奧妙在哪,繼續(xù)研究BeanAction的代碼,截取BeanAction的excute方法中核心部分代碼如下:?






























































通過研究上面這段代碼,我們可知,JpetStore中沒有具體Action實現(xiàn)的關鍵原因即在于下面這幾句

























以上是整個beanaction的實現(xiàn)機制。個人感覺此種實現(xiàn)方法對于開發(fā)者而言已經類似于ASP.NET的.aspx與.cs開發(fā)模式了。下面是通過實例來說明一下BeanAction如何控制formbean的
?
Struts-config.xml的配置里有3種映射方式,來告訴BeanAction把控制轉到哪個form bean對象的哪個方法來處理。
(1)parameter=”*’直接跳轉;(2)Parameter中含具體的方法名;(3)Path中最后一個/后的方法名
以這個請求連接為例http://localhost/jpetstore4/shop/viewOrder.shtml
1. URL Pattern
??? |






?
此種方式表示,控制將被轉發(fā)到"orderBean"這個form bean對象 的"viewOrder"方法(行為)來處理。方法名取"path"參數(shù)的以"/"分隔的最后一部分。
2. Method Parameter?






?
此種方式表示,控制將被轉發(fā)到"orderBean"這個form bean對象的"viewOrder"方法(行為)來處理。配置中的"parameter"參數(shù)表示form bean類上的方法。"parameter"參數(shù)優(yōu)先于"path"參數(shù)。
3. No Method call






此種方式表示,form bean上沒有任何方法被調用。如果存在"name"屬性,則struts把表單參數(shù)等數(shù)據(jù)填充到form bean對象后,把控制轉發(fā)到"success"。否則,如果name為空,則直接轉發(fā)控制到"success"。
這就相當于struts內置的org.apache.struts.actions.ForwardAction的功能
![]() ![]() ![]() ![]() ![]() |
?