我有一個在IE,FF,Safari和Chrome上運行良好的glassfish 3.1上運行的JSF 2.0 web應用程序。當在Safari中使用iframe時,GlassFish 3.1上的JSF 2.0 ViewExpiredException
當我在另一個網站的iframe中添加我的網站的網址時,我點擊iframe內的任何按鈕後,我得到ViewExpiredException - 這隻發生在Safari上,在IE,FF,Chrome中正常工作。
<iframe style="width: 100%; height: 800px" src="url_of_my_website" frameBorder="0"></iframe>
以下是我的觀察
- 部署在GlassFish 3.0.1相同的應用程序和問題不會發生
- 如果我打開我的網站沒有框架,它不考慮工作的瀏覽器罰款
- 開發利用JSF1.2和RF 3.3.3相同的應用程序和問題不會發生
根據我的理解,如果在會話過期的頁面上執行任何操作,我們將得到ViewExpiredException。但在這種特殊情況下,它恰好在網站獲得負載之後發生。
我不確定是什麼原因造成的。它是Safari/JSF 2.0/GF 3.1/IFRAME嗎?
更新: 我發現了一個有趣的問題。在我的主頁上,我有一個h:commandLink將我重定向到一個新頁面。此外,我有一個href鏈接重定向到其他頁面。當我點擊commandLink時,我得到了ViewExpiredException,但是當我點擊href鏈接時,我沒有收到任何異常,並且頁面被重定向,並且隨着會話cookie的建立,我可以繼續進一步的操作。
根據您的更新:這是正常的。命令鏈接提交一個隱藏的表單並有效地觸發一個POST請求,因此要求在同一個會話中觸發請求。普通鏈接激發GET請求,該請求不需要在同一個會話中觸發請求。只需要一個新的會話即可創建。如果您不需要提交額外的POST數據,則根本不需要命令鏈接。 – BalusC