2012-06-14 44 views
0

我只想問問任何人是否做過這樣的事情。基本上,它就像paypal快速結賬功能:在Jersey Servlet和JSF Backing Bean之間共享一個作用域

1.)您選擇商品店中結帳的項目。

2.)您將被重定向到一個登錄頁面,在我的情況下,我將它作爲Jersey Rest Servlet實現。在發佈後,將數據存儲在會話EJB支持bean中,並調用Response.seeOther()重定向到登錄頁面(JSF)。

3.)如果登錄成功,則發佈的事務數據應該保留。

但看起來,雖然我可以調用會話支持bean,但將發佈的數據存儲在該bean內的變量中。當我點擊login(登錄成功)並重新訪問同一個bean時,存儲發佈數據的變量將變爲null。

那麼會話作用域是不是在ejb的Jersey Rest Servlet和Session scope backing bean之間共享?

還有其他什麼好辦法嗎?

感謝,
czetsuya

回答

0

在試圖解決這個問題之後,我得出了一個結論:不能將jsf會話分享給澤西或servlet會話,因爲它們以不同的方式實現。

我對我的問題的解決方案(不回答這個問題)是使用HttpServlet的,事務存儲爲一個會話屬性:

HttpSession session = request.getSession(true); 
session.setAttribute("POSTED_ITEMS", postedItems); 

所以,我就可以把它接入到下一頁。

*我希望有一種方法發佈到由javaee6 bean支持的jsf頁面,這將使生活變得簡單:-)。

1

會話範圍不適用於Web服務調用。您需要使用應用程序範圍,或創建自己的應用程序範圍。

+0

我明白了,現在澄清了。不幸的是,應用程序範圍似乎不是一個好主意,因爲我可以同時擁有多個結帳交易,而且我不想將發佈的數據存儲在1個應用程序範圍變量中。 – czetsuya

+0

這就是爲什麼地圖設計的(這當然是應用服務器在內部處理並行會話的方式...... :-)另一種選擇是將數據存儲在數據庫中,但這時您可能不得不擺弄取消登錄。 –

+0

不幸的是,雖然數據庫是最簡單的方法,但它可能不是最好的選擇,因爲垃圾數據只會堆積在數據庫中。我對地圖不太確定,因爲我之前沒有實現過這種類型的功能。所以這就像我將有一個將綁定到用戶(1到1)的訂單地圖? – czetsuya