首页 > 解决方案 > “JSF 运行时”是什么意思,“javax.faces.webapp.FacesServlet”是如何相关的?

问题描述

我见过对“JSF 运行时”的引用。我以某种方式理解“javax.faces.webapp.FacesServlet”是 JSF 运行时的“入口点”。我不清楚这是什么构成。

我认为这与生命周期管理有关(根据我对 Serlvets + JSP 的了解,我对它有点熟悉 - 因为它是调用构造函数、init() 方法、 Servlet 的 service() 方法并在 Container 关闭时销毁 Servlet)。但是,我怀疑 JSF 运行时的意义远不止于此。如果 JSF 运行时仅仅是一个仅限于(并且只关心)生命周期管理的东西 - 我非常希望能稍微了解一下这对 JSF 究竟意味着什么(尽管我理解它对 Servlet 和 JSP 的意义),我看不出这在 JSF 方面具体意味着什么,并且非常感谢这方面的指导。

标签: jsf

解决方案


在JSF 规范中确实多次提到确切的短语“ JSF 运行时” 。

渲染完成后,但在保存状态之前,JSF 运行时必须发布一个 javax.faces.event.PostRenderViewEvent. 在这样做之后,JSF 运行时必须使用类的方法保存完成状态StateManager。[...]

如果包含JSF 运行时的环境需要 JSR 303 Bean 验证,则 JSF 实现必须支持 JSR 303 Bean 验证。[...]

以下方法使JSF 运行时可以访问此实例存储的侦听器列表。:[...]

JSF 运行时被其容器指示关闭时,必须执行以下操作。[...]

顺便说一句,在同一个 JSF 规范中,确切的短语“运行时”的命中率要高得多,但我会留给你去寻找它们。

它基本上归结为当前配置和活动的 JSF 应用程序。整个 JSF 生态系统都已准备FacesServletLifecycleApplication等待将 HTTP 请求作为 Faces 请求进行处理。faces-config.xml通过JSF 部署描述符文件和/或@FacesXxx带注释的类配置为默认值或覆盖/自定义。

FacesServlet只是 JSF 运行时的一部分。它确实是生态系统的切入点。如果传入HttpServletRequest匹配 的 servlet 映射的 URL 模式FacesServlet,那么它将由 servletcontainer照常调用。将FacesServlet依次创建FacesContext和处理请求LifecycleApplication最后FacesContext在返回到 servletcontainer 之前销毁该权利。

也可以看看:


推荐阅读