【发布时间】:2012-10-21 20:05:36
【问题描述】:
由于所有 JSP 在执行之前都会生成/转换为 Servlet,Facelets 也是如此吗?
我正在使用 JSF 2.0 和 Facelets,想看看它生成的 Java 代码可能是 Servlet。
【问题讨论】:
标签: jsf compilation facelets
由于所有 JSP 在执行之前都会生成/转换为 Servlet,Facelets 也是如此吗?
我正在使用 JSF 2.0 和 Facelets,想看看它生成的 Java 代码可能是 Servlet。
【问题讨论】:
标签: jsf compilation facelets
不完全一样,它被缓存了。但它不会生成 servlet 代码。
【讨论】:
不,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
【讨论】: