2011-11-09 110 views
2

我現在已經沒有想法了,不知道還有什麼要嘗試的。點甚至沒有一個錯誤頁的工作,我只是想知道,我究竟做錯了什麼?這裏是代碼:web.xml錯誤頁面無法正常工作,爲什麼?

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/sessionexpired.xhtml</location> 
</error-page> 
<error-page> 
    <error-code>500</error-code> 
    <location>/500.xhtml</location> 
</error-page> 

當具有在我的web.xml這個代碼,我得到這個消息:

XML read error: no element found

此消息的含義是什麼?我該如何解決這個問題?謝謝。

順便說一句,我也嘗試使用過濾器來處理ViewExpiredException,然後它在我發送POST消息並重定向到sessionexpired.xhtml時第一次工作。但是,如果我點擊後退,然後再次進行POST調用BAM!我再次得到ViewExpiredException

UPDATE 30-NOV-2011 - [ALTERNATE SOLUTION] --------------------------------- ----

過了一會兒,我發現,爲了使它工作,你必須指定loation到的.html或.jsp文件,所以它最終將會:

<error-page> 
    <exception-type>javax.faces.application.ViewExpiredException</exception-type> 
    <location>/sessionexpired.html</location> 
</error-page> 
<error-page> 
    <error-code>500</error-code> 
    <location>/500.jsp</location> 
</error-page> 
+0

嗨Bresh Gurung,是的這是一個非常詳細的答案,但也沒有工作。問題是它拋出的消息「XML讀取錯誤:找不到元素 - 位置http:// localhost:8080/XXXXXXX - 行號1列1」,任何想法可能是什麼原因造成的? –

+0

哪個Glassfish版本?你的''根聲明是怎麼樣的?誰在給出錯誤信息?你的編輯或Glassfish本身?那個錯誤真的沒有更多嗎?我希望看到行號和列號。 – BalusC

+1

我正在使用Glassfish 3.1;該錯誤消息由瀏覽器顯示;是的,有一個行號1列號1.我最終創建了一個ExceptionHandlerFactory,這樣我就可以捕獲ViewExpiredException。正如我在論壇上看到的,這似乎是Glassfish 3.1中的一個錯誤,他們表示他們會在下一個版本中修復它。 –

回答

1

那麼,對於那些使用Glassfish的3.1這個問題strugling,您可以通過這篇文章,以信如下處理這個問題,甚至認爲我在最後改爲使用的sendRedirect()代替JSF導航以呈現sessionexpired.xhtml文件,但這是您的選擇,它工作正常。在這裏你去:

http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2

+0

你知道有'ExternalContext#redirect()'方法嗎?沒有更多不必要的'javax.servlet'輸入了。 – BalusC

+0

我的標籤僅解析'* .jsp'頁面,而不是'* .html'頁面。任何想法,爲什麼發生這種情況? –

+0

@SajibAcharya(不知道但是)我認爲'* .html'不是由JSF處理的,只是'* .jsp'。 –

0

可能有些問題試試這個可能會有所幫助..
<error-page>標記在<servlet-mapping>之後。

<web-app> 
... 
<servlet> 
... 
    </servlet> 
    <servlet-mapping> 
    ..... 
    </servlet-mapping> 
    ... 
    <welcome-file-list> 
    ... 
    </welcome-file-list> 
    <error-page> 
    <error-code>404</error-code> 
    <location>/errorpages/html404.html</location> 
    </error-page> 
<taglib> 
... 
</taglib> 
... 
</web-app> 
+0

嗨SUMIT SINGH,感謝您的回答,但是我已經在servlet映射之後有錯誤頁面。當我放置error-place子句時,它只會引發錯誤「XML read error:no element found」。可能是什麼原因造成的? –

+1

自從Servlet 2.4(帶有XSD)以來,訂購​​並不重要。在此之前,帶有DTD和更舊的Servlet 2.3,訂購事宜。但是誰現在使用的API超過10年? – BalusC

0

When having this code in my web.xml I get this message:

XML read error: no element found 

按事實證明,你在瀏覽器中,而不是預期的錯誤頁面看到此評論。由於web.xml中的語法錯誤,我最初將它解釋爲由您的IDE /編輯器提及。你的問題並不完全清楚。

那麼,解決方案很簡單:確保<error-page><location>匹配FacesServlet的URL模式。最簡單的方法是將FacesServlet映射到*.xhtml的URL模式。


BTW, I have also tried to use filters to handle the ViewExpiredException, then it works the first time when I send the POST message and redirects to the sessionexpired.xhtml. But if I click backward and then make the POST call again BAM! I get again the ViewExpiredException.

這僅僅是由頁面所導致的被請求從瀏覽器緩存,而不是直接從服務器。另請參閱具體解決方案的答案:browser back + viewscope beans

+0

嗨BalusC,感謝您的答案,但它仍然無法正常工作。我的** FacesServlet **的網址格式爲***。xhtml **(和往常一樣),** **的** **與上面提到的在我的問題中相同,它顯示了與黃色背景相同的瀏覽器錯誤BTW。 –

+0

該錯誤是瀏覽器特定的。您似乎正在使用FF,確實會出現這樣的XML錯誤。那麼,右鍵單擊頁面並查看源代碼。你看到了什麼?它是空的嗎?還是沒有解析?使用Firebug並檢查請求/響應頭。他們說什麼?尤其是響應內容類型。 – BalusC

+0

結果爲** HTTP/1.1 500內部服務器錯誤**,結果的源代碼以** **開頭。我也嘗試從web.xml捕獲錯誤代碼500,但它只是沒用,沒有錯誤頁面在那裏工作。可能是我應該嘗試使用另一臺機器,或者安裝Glassfish的時候可能會出錯,我真的不知道。它嘗試使用web.xml捕獲錯誤,但在解析XML文件時導致另一個錯誤,這就是我所知道的。 –

0

更改後的web.xml中,你做耳朵或戰爭重新部署? 如果直接轉到服務器以修改文件,某些應用程序服務器可能會緩存web.xml的舊副本。 希望它可以工作。:)

相關問題