如何从不是JSF Bean的类创建FacesMessage?

时间:2012-06-19 18:58:12

标签: java jsf

我是JSF的新手并且遇到了问题。我希望有人可以帮助我。

问题:

  • 非bean的处理程序检测来自TCP / IP管道的消息。
  • 处理程序需要创建一个新的FacesMessage以在消息框中显示消息。
  • 由于处理程序不是bean,FacesContext返回null,因此处理程序无法编写FacesMessage

问题:

  1. 以某种方式可以做我想做的事情吗?
  2. 将外部消息从非bean的Java类传播到FacesMessage以便它显示在UI上的最佳方法是什么?
  3. 有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:3)

如果您处于实际的faces会话中,FacesContext.getCurrentInstance()方法仅返回有效的faces上下文。我认为你应该做的是构建这个,这样你的TCP / IP消息处理类提供了一种方法,可以让faces托管bean获取有关前端消息的信息,然后从一个方法访问该方法。托管bean。

根据您正在使用的应用程序服务器类型,您可能希望将整个过程设置为通过EJB会话Bean进行交互。但实际上任何支持bean或面临的逻辑都应该与与UI无关的逻辑分开。

如果您正在使用符合JEE6的应用程序服务器(如Glassfish),您可以设置一个@Singleton EJB来保存一组消息(确保使用支持并发的数据结构)和类似JCA套接字的东西( http://code.google.com/p/jca-sockets/)来处理套接字通信。

答案 1 :(得分:1)

不,这是不可能的,替代方法是通过@ManagedBean注释创建支持bean,或者在faces-config.xml中创建条目,如

  <managed-bean>
    <managed-bean-name>bean</managed-bean-name>
    <managed-bean-class>com.test.bean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

现在您可以获得facesContext并创建FacesMessage两者,希望这会有所帮助。