2010-01-25 54 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