7

由于所有 JSP 在执行之前都生成/转换为 Servlet,Facelets 也是如此吗?

我正在使用 JSF 2.0 和 Facelets,并希望看到它生成的 Java 代码可能是 Servlet。

4

2 回答 2

13

不,Facelets 文件使用SAX 解析器解析为 XML 树。XML 树存储在Facelet 缓存中。XML 树在视图构建期间变成了UIComponent可访问的树FacesContext#getViewRoot()(您可以getChildren()在运行时遍历)。组件树通常通过它们自己的encodeXxx()方法或相关联的方法生成 HTML 代码Renderer,以UIViewRoot#encodeAll().

Facelets 文件生成任何类文件。XML 树默认存储在服务器的内存中。但是,从 JSF 2.1 开始,您可以指定自定义FaceletCache实现,您可以<facelet-cache-factory>faces-config.xml其中编写代码以将 XML 树存储在例如磁盘文件系统上(不过这会更慢)。

如果<ui:debug>在视图中使用并打开它,则可以看到后面的组件树的文本表示UIViewRoot。另请参阅如何调试 JSF/EL

也可以看看:

于 2012-11-01T11:31:57.280 回答
1

不完全相同的方式,它被缓存。但它不会生成 servlet 代码。

于 2012-11-01T09:37:57.603 回答