3

我是 JSF 的新手,正在努力解决一个问题。我希望有人能帮助我。

问题:

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

问题:

  1. 有没有可能做我想做的事?
  2. 将外部消息从不是 bean 的 Java 类传播到 aFacesMessage以使其显示在 UI 上的最佳方法是什么?

关于如何解决这个问题的任何想法?

4

2 回答 2

3

FacesContext.getCurrentInstance() 方法仅在您处于实际的人脸会话中时才返回有效的人脸上下文。我认为你应该考虑做的是构建这样的架构,以便你的类进行 TCP/IP 消息处理提供了一种方法,让 faces 托管 bean 获取有关前端消息的信息,然后从托管 bean。

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

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

于 2012-06-19T19:12:32.057 回答
1

不,这是不可能的,另一种方法是通过@ManagedBean注释或在 faces-config.xml 中输入类似的条目来创建支持 bean

  <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两者,希望这会有所帮助。

于 2012-06-19T19:07:29.737 回答