在一個JSF託管bean,我從this past question採取了以下代碼:轉發來自JSF的請求,託管bean到一個Struts 2的動作不起作用
String uri = "/myAction";
FacesContext.getCurrentInstance().getExternalContext().dispatch(uri);
myAction
是一個Struts動作的名稱在我的struts.xml
中定義。
但是,當我訪問JSF bean時,我不會轉發到/myAction
。相反,我得到一個404 http錯誤:The requested resource (/MyApp/myAction) is not available
。
爲什麼不起作用?
當我試圖直接從瀏覽器訪問/myAction
通過去http://localhost:8080/MyApp/myAction
所有工作正常。
爲什麼它看起來你不像我以前(/ myAction)的網址,以便爲它工作,應該是相對於Web服務器的根文件夾('HTTP:// mydomain.com') ?它應該與應用程序上下文相關('http:// mydomain.com/MyApp')。正如你所說的那樣。所以,它應該有效,如果我讓你正確。它可以與xhtml文件一起工作,這些文件也可以在應用程序上下文的根目錄找到,比如'/ welcome.xhtml'。我誤解了你的意思嗎? – rapt
出於某種原因,我認爲問題的根源在於JSF管理的bean存在於一個servlet(JSF servlet)中,而Struts動作存在於一個過濾器(Struts 2過濾器)中。在所有servlet完成後調用過濾器。所以,如果我從一個JSF bean轉發到一個圍繞過濾器構建的框架,它似乎不能工作......因爲只要JSF bean還活着就沒有過濾器。或者我誤解了生命週期? – rapt
啊,對不起。疲倦時張貼的危險。我看到「當我嘗試訪問/ myAction時」,並認爲您沒有通過應用程序上下文訪問。在這種情況下,是的,這很奇怪......但我沒有使用struts,所以我不知道應該如何訪問struts過濾器。儘管在servlet api中調度方法期望着陸在另一個我相信的servlet上(這就是我一直使用的servlet) - 所以我敢打賭,這是因爲struts是一個過濾器。使用重定向工作嗎? –