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 代码 【参考方案2】:

不,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的主要内容,如果未能解决你的问题,请参考以下文章

在 JSF2 项目中混合 JSP 和 XHTML (Facelets) - 可能吗?

Facelets:页面未呈现

JSF vs Facelets vs JSP [重复]

JSP标签

如何创建自定义 Facelets 标签?

Spring MVC 和 Facelets 等模板引擎