2011-11-03 30 views
0

我有一個IceFaces項目。打開基本URL 本地主機:8080/myContextPath打開一個名爲index.jsp的有以下內容的文件:IceFaces 2 - 導航規則有時不適用

<html> 
    <head> </head> 
    <body> 
    <jsp:forward page="faces/search.xhtml" /> 
    </body> 
</html> 

這第一個重定向到的面孔/ search.xhtml。該頁面沒有任何問題。瀏覽器地址欄按預期顯示localhost:8080/myContextPath

坐落在search.xhtml頁面上,有一個提交按鈕,看起來像這樣:

<h:commandButton type="submit" value="Search" id="submit" actionListener="#{searchBean.submitButton}" action="#{searchBean.navigate}" /> 

點擊該按鈕觸發的ActionListener,然後導航 -action,它返回一個簡單成功

的導航規則本身看起來是這樣的:

<navigation-rule> 
    <from-view-id>/search.xhtml</from-view-id> 
    <navigation-case> 
    <from-outcome>success</from-outcome> 
    <to-view-id>/search.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

的導航規則應該適用,因爲據我所知,在任何情況下。

不幸的是,有時這是行不通的。準確地說,每隔兩次它就不能工作。點擊submit按鈕會首先觸發動作監聽器,然後webapp會「思考」大約1-2秒,然後重定向到一個破損的頁面。

正常方式之間的差異

本地主機:8080/myContextPath - >點擊提交按鈕 - >本地主機:8080/myContextPath

和破碎的方式是,它看起來像這樣在地址欄

localhost:8080/myContextPath - >單擊提交按鈕 - > localhost:8080/myContextPath/faces/search.xhtml。

頁面被破壞,導致所有的javascript和css文件不能再被找到,因爲它們被相對路徑引用。

你有什麼想法,哪些問題會導致這種導航失效?簡而言之:首次加載頁面,是index.jsp頁面中的簡單重定向:index.jsp - > jsp:formward - > search.xhtml。然後我點擊提交按鈕,導航規則重新載入search.xhtml。現在,我再次按下提交按鈕,現在導航規則不再工作。而是將地址欄中的url更改爲localhost:8080 // faces/search.xhtml,而不是保留在localhost:8080 /中。

問候 托比亞斯

回答

0

執行此操作時,實際發生的事情是,你是向前看,而不是客戶端重定向做服務器端,這就是爲什麼雖然你的地址欄中顯示「myContextPath」 是已經在「面孔/ search.xhtml」

<jsp:forward page="faces/search.xhtml" /> 

基本上當你點擊「瀏覽」從/search.xhtml改變規則/faces/search.xhtml