Facelets 页面是不是像 JSP 生成到 Servlet 一样生成到 Servlet
Posted
技术标签:
【中文标题】Facelets 页面是不是像 JSP 生成到 Servlet 一样生成到 Servlet【英文标题】:Is Facelets page generated to Servlet as JSP generated to ServletFacelets 页面是否像 JSP 生成到 Servlet 一样生成到 Servlet 【发布时间】:2012-10-21 20:05:36 【问题描述】:由于所有 JSP 在执行之前都会生成/转换为 Servlet,Facelets 也是如此吗?
我正在使用 JSF 2.0 和 Facelets,想看看它生成的 Java 代码可能是 Servlet。
【问题讨论】:
【参考方案1】:不完全一样,它被缓存了。但它不会生成 servlet 代码。
【讨论】:
请告诉我这个 xhtml 标签的 java 代码不,Facelets 文件使用SAX parser 解析为 XML 树。 XML 树存储在Facelet cache 中。 XML 树在view build time 期间变成了UIComponent
树,FacesContext#getViewRoot()
可以访问它(您可以在运行时通过getChildren()
遍历它)。组件树通常通过自己的encodeXxx()
方法或关联的Renderer
上的方法生成HTML 代码,以UIViewRoot#encodeAll()
开头。
Facelets 文件不生成任何类文件。 XML 树默认存储在服务器的内存中。但是,从 JSF 2.1 开始,您可以通过 <facelet-cache-factory>
在 faces-config.xml
中指定自定义的 FaceletCache
实现,其中您可以编写代码以将 XML 树存储在例如磁盘文件系统上(不过会更慢)。
如果你在视图中使用<ui:debug>
并打开它,那么你可以看到UIViewRoot
后面的组件树的文本表示。另见how to debug JSF/EL
另见:
Why not JSF pages are precompiled (atleast partially) but instead parsed, evaluated each time view is built? What's the view build time? Measure the render time of a JSF view after a server request Why Facelets is preferred over JSP as the view definition language from JSF2.0 onwards?【讨论】:
以上是关于Facelets 页面是不是像 JSP 生成到 Servlet 一样生成到 Servlet的主要内容,如果未能解决你的问题,请参考以下文章