我刚刚开始使用 JavaServer Faces,它看起来很有吸引力。但是,我想在与 JSF 相同的 Web 应用程序中使用我自己的 servlet。
这可能真的很明显,但是将 JSF 与“普通”基于 servlet 的应用程序集成的最佳实践是什么?这将包括从 servlet 访问 JSF 数据(读取和写入)。
最佳答案
如果您的 servlet 编写得很好,那么它们应该已经 而不是 内部有任何业务逻辑,而只是纯粹的请求/响应控制/预处理/后处理逻辑。业务逻辑应该已经放置在独立的类似 javabean 的域/模型类中。数据库逻辑应该已经放置在独立的 DAO 类中。等等。您可以在 JSF 中全部重用它们。
也就是说,知道 JSF(在 Servlet API 之上运行时——常见情况)管理请求范围的 bean 作为 HttpServletRequest
的属性, session 范围的 bean 作为 HttpSession
的属性,应用程序范围的 bean 作为属性可能很好知道ServletContext
。知道所有这些请求、 session 和应用程序属性都可以通过 ExternalContext#getRequestMap()
、 #getSessionMap()
和 #getApplicationMap()
访问也可能是件好事。您现在应该意识到您可以从 servlet 内部以通常的方式访问它们。
在任何情况下,当技术需要访问 FacesContext
或 Servlet
中的 Filter
时,请立即停止编码并根据上述事实重新考虑您的方法。最好在新的托管 bean 中完成吗?或者也许是 PhaseListener
?