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






























































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

























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






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






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






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