2010-01-25 82 views
1

的同一個實例我整合在JSF-ICEfaces的應用一個Flex應用程序(在JSPX網站與冰:outputmedia標籤),並希望通過遠離柔性訪問bean的同一個實例,那jsf注入。Flex和JSF訪問bean

我已經連接blazeds到java-bean。這個bean與所有其他bean一樣,通過注入jsf來獲得其他bean,但是當我通過遠程flex訪問bean時,它並不持有注入的bean(如localizer和accesmanager,兩個session均有作用域),而且我無法連接到jsf會話(FacesContext.getCurrentInstance()爲空)。這是因爲flex創建了一個新的bean實例,它不是當前的實例,jsf注入,我想。

我可以通過在java bean中創建一個新的實體管理器從flex連接到數據庫,但那不是我想要的,因爲它又是另一個實體管理器...我想持久化並通過accessmanager-bean獲取數據。

我知道exadel斐濟和火烈鳥,但我無法與斐濟合作,因爲我的jsf應用程序包含icefaces組件,然後它不適用於斐濟需要的richfaces。火烈鳥只能用jboss縫和春天工作。這樣對嗎?

我也讀到彈簧柔性整合,但JSF應用程序沒有彈簧創建和我不想春天在如此大的JSF應用程序集成。我昨天讀了關於FlexFactory接口的內容。這個接口我必須在我自己的Factory中實現,並將其設置在blazeds的service-config.xml中作爲工廠read this。我仍然實現了自己的工廠,但是我只通過servlet上下文獲得了應用程序範圍的bean,我通過FlexContext.getServletContext()。getAttribute(「Bean」)獲得了該範圍。而不是會話範圍豆...

我希望有連接擲Flex和JSF ...... 感謝的機會!

+0

親愛的大衛,可你分享了一個示範代碼,瞭解你如何設法整合冰河和冰霜? – user284173 2010-03-02 06:50:38

+0

我在這裏回答你的問題: http://stackoverflow.com/questions/2361546/accessing-jsf-bean-from-blazeds-client/ – David 2010-03-02 12:04:25

回答

1

FacesContext.getCurrentInstance()爲null

這隻會發生在當前請求通過FacesServlet獲得通過。換句話說,請求URL與FacesServleturl-pattern不匹配。它是負責創建線程本地FacesContext實例的人員。

但您實際上並不需要這裏的FacesContext。由於JSF只是運行在Servlet API的頂層,所以您也可以低級別並使用它來獲取會話範圍的託管bean。 JSF將會話作用域託管的bean存儲爲HttpSession的屬性,並將託管的bean名稱作爲關鍵字。

因此,如果例如有一個會話範圍的託管bean與被管理bean的名字myBean,你有HttpServletRequest在你的手中,那麼你也可以訪問它,如下所示:

MyBean myBean = (MyBean) request.getSession().getAttribute("myBean"); 
+0

謝謝,這真的有幫助! 在FlexContext我得到的HttpRequest: HttpServletRequest的HSR = FlexContext.getHttpRequest(); this.accessManager =(AccessManager)hsr.getSession()。的getAttribute( 「accessManagerBean」); 我不知道爲什麼我沒有使用它!我也在其他情況下使用過這個...但是有時我在工作幾個小時後失明;) 謝謝! – David 2010-01-25 12:11:00

+0

不客氣。 – BalusC 2010-01-25 12:18:26