我想在glassfish 3.1上使用primefaces 2.2.1在ajax調用上處理ViewExpiredException異常。我有一個像這樣的ajaxStatus:Primefaces p:ajaxStatus onerror不叫
<p:ajaxStatus id="ajaxStatus"
onstart="startAjaxDisplay()"
onerror="ajaxErrorHandler()"
oncomplete="endAjaxDisplay()"/>
onstart和oncomplete get按預期方式調用。我知道ajaxErrorHandler()的作品,因爲我把它放在oncomplete,而它被調用。它現在正在做的是彈出警報()。我建立了我的試驗,從服務器的響應看起來是這樣的:
<?xml version="1.0" encoding="UTF-8"?>
<partial-response>
<error>
<error-name>class javax.faces.application.ViewExpiredException</error-name>
<error-message><![CDATA[viewId:/index.xhtml - View /index.xhtml could not be restored.]]></error-message>
</error>
<changes>
<extension primefacesCallbackParam="validationFailed">{"validationFailed":false}</extension>
</changes>
</partial-response>
這一切如預期,除了使用onerror只是不會被調用。我誤解了這是如何工作的?
如何模擬錯誤?你是否明確拋出'ViewExpiredException'或者你只是假設它應該在某個地方被調用。我問這個是因爲我的想法是,如果在該命名錯誤之前得到一些其他錯誤,並且'ViewExpiredException'是因爲沒有調用該錯誤。 – mico
在這種情況下,我從facesContext.getExternalContext()。getSession()獲取會話,然後在其上調用invalidate()。調用它的方法從不同的瀏覽器窗口調用。我也嘗試過重啓服務器和設置一個非常短的會話超時。 – JOTN
我的'答案'是一個關於你是否100%肯定的說invalidate()方法拋出所謂的'ViewExpiredException'而沒有別的?我的假設是它可能會拋出一些其他的東西,這就是爲什麼你沒有看到它。這是一個想到的假設,而不是經過科學證明的答案。 – mico