2013-04-03 19 views
1

我試圖轉換爲JSF,並使用Struts和OpenSymphony(現在是dead project)編寫的Web應用程序。模擬在Struts動作上運行HTTP請求

該web項目的問題在於,Struts操作是用很多代碼編寫的,直接進入並獲取視圖(生成的JSP)的數據。很多時候,他們也有他們的Struts動作擴展了其他動作,所以當我用某種形式調用某些動作時,很難追蹤正在執行的邏輯。

所以,如果我想在我的JSF託管bean這個數據,我看到兩個選項:

  1. 要的行動是層次結構中發生什麼每​​種情況弄清楚,並重新創建代碼一些UI服務(獨立於框架),然後從我的託管bean中調用該服務。

  2. 在我的UI服務中,爲了模擬某個HTTP請求對該操作的操作,獲取該數據,然後從我的託管bean調用該服務。

(1)很多工作,我現在不想做,也許將來不會做。 (2)要快得多,但我不確定在Struts的情況下如何去做。

如果我嘗試做這樣的事情:

SomeAction Action = new SomeAction(); 
action.execute(); 

這通常不工作...因爲有些時候操作,從SomeAction繼承,將獲得request並從中獲取數據。所以一個方法來克服它是這樣做的:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); 

SomeAction Action = new SomeAction(); 

action.setServletRequest(request); 
action.execute(); 

這仍然沒有因爲有些時候操作工作,從,將創建以後會通過SomeAction使用某些對象SomeAction繼承。

是否有一種方法可以簡單地模擬當前請求對特定Struts操作的提交,並且確切地說明Struts容器如何執行該操作,以便獲得該操作的所有預期結果?

我猜這樣的事情可以在測試類中完成,我如何爲Struts做到這一點?

回答