實現了ModelDriven就必須實現getModel這個方法,該方法返回的是你的ModelDrivern泛型中設定的實體類。其實是為了實現代碼的重用,不要再定義一次你在數據訪問層定義的屬性了,直接用那個類就行了。不過有時候也不是很需要這個東西,比如只有一兩個表單域的時候
Struts2的Action在實現com.opensymphony.xwork2.Preparable接口后,就可以重寫prepare()方法
此時在Action中,prepare()方法的執行點是在:setXxx()和execute()的執行之前
比如需求:在執行Action的方法前,接收前台隱藏域傳過來的值,再根據該值執行相應邏輯
如前台傳過來ID,我們根據ID查找數據庫對應的用戶信息,再跳轉到modify()中修改信息
但實際的運行過程中發現,通過Debug斷點調試得知prepare()方法接收到的ID值是零
即前台隱藏域中的ID值沒有傳過來,事實上問題就出在默認的defaultStack攔截器棧上
其實defaultStack無法接收prepare()需要的數據,而應借助paramsPrepareParamsStack攔截器棧
事實上使用prepare攔截器之前,應先調用params攔截器,prepare()才能接收到表單數據
基於這個思路,於是可以通過各種手段將params攔截器放置在prepare攔截器之前即可
比如將defaultStack中的所有攔截器拷貝到struts.xml的我們自定義的myStack攔截器棧中
再按照paramsPrepareParamsStack攔截器棧中的params和prepare順序修改二者位置即可