我决定尝试JSF 2.2(或者我们目前所拥有的),所以我抓取了Mojarra的最新快照构建并进行了设置。现在我有了一个使用pretypto的模板。它在JSF 2.1上工作得很好,但是当我切换到最新的mojarra构建时,pretyphoto窗口没有显示。它让我疯狂了几个小时(我的电脑现在有2个glassfish服务器,一个是最新的mojarra,一个是稳定的)。在意识到最新的mojarra构建并没有忽略以<ui:composition>
开头的模板客户端的DOCTYPE后,我让它工作了。
为了让我的例子更清楚…像这样:
JSF 主模板与DOCTYPE HTML和一些UI: insert
<?xml version='1.0' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
使用DOCTYPE组合实现主模板的JSF常规页面:
<?xml version='1.0' encoding='UTF-8' ?>
<?xml version='1.0' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:jsf="http://java.sun.com/jsf"
template="./WEB-INF/template/MASTERTEMPLATE.xhtml>
.....<ui:define /> etc etc....
</ui:composition>
当这个后一个模板客户端呈现给浏览器时,它将与doctype组合一起发送。我认为它应该忽略ui:composition之外的一切。在稳定的Mojarra构建中,Composition DOCTYPE被忽略,它以html…
我最初怀疑这是一个bug,但也许它是故意的?虽然他们应该告诉你,我浪费了一整天的时间。
我有这个代码
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/template/template.xhtml">
如果你的模板文件夹在web-inf中,添加这个文件夹
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/template/template.xhtml">