flex和jsf访问bean的同一个实例

时间:2010-01-25 11:11:57

标签: flex jsf blazeds icefaces

我在一个jsf-icefaces应用程序中集成了一个flex应用程序(在带有ice:outputmedia-tag的jspx站点中),并希望通过远程访问flex来访问bean的同一个实例,即jsf inject。

我已经将blazeds连接到java-bean。这个bean - 就像所有其他bean一样 - 通过注入jsf来获取其他bean,但是当我通过远程从flex访问bean时,它不会保存注入的bean(如localizer和accesmanager,两个会话作用域),我无法连接到jsf session(FacesContext.getCurrentInstance()为null)。这是因为flex创建了一个bean的新实例,它不是同一个当前实例,我想是jsf注入。

我可以通过在java bean中创建一个新的实体管理器从flex连接到数据库,但这不是我想要的,因为它又是另一个实体管理器...我想要持久化并通过accessmanager-bean获取数据。

我知道斐济和火烈鸟,但我无法与斐济合作,因为我的jsf应用包括冰面组件,然后它不适用于斐济需要的丰富面孔。和火烈鸟只与jboss接缝和弹簧一起工作。是不是?

我也读过关于spring-flex-integration,但是jsf应用程序没有用spring创建,我不想在这么大的jsf应用程序中集成spring。 昨天我读到了FlexFactory界面。这个接口我必须在我自己的工厂中实现,并将它作为工厂read this设置在blazeds的service-config.xml中。我仍然实现我自己的工厂,但我只在servlet上下文中获取应用程序范围的bean,我得到了FlexContext.getServletContext()。getAttribute(“Bean”);而不是会话范围的豆...

我希望有机会连接throw flex和jsf ... 谢谢!

1 个答案:

答案 0 :(得分:1)

  

FacesContext.getCurrentInstance()为null

仅当当前请求通过FacesServlet时才会发生这种情况。换句话说,请求网址与url-pattern的{​​{1}}不匹配。它就是负责创建threadlocal FacesServlet实例的人。

但实际上你不需要FacesContext。由于JSF只是在Servlet API的顶层运行,您也可以进入低级别并利用它来获取会话范围的托管bean。 JSF将会话范围的托管bean存储为FacesContext的归属,并将托管bean名称作为密钥。

因此,如果您有一个具有托管bean名称HttpSession的会话作用域托管bean,并且您手头有myBean,那么您也可以按如下方式访问它:

HttpServletRequest