我们在“主要”页面中使用了多个ui:include
标记。要包含的页面如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=".." xmlns:ui="..." ...>
<ui:fragment rendered="${foo}">
some html code
</ui:fragement>
<ui:fragment rendered="${!foo || bar}">
some more html code
</ui:fragement>
</html>
使用ui:include
模板导致在源代码中多次重复DOCTYPE
和html
标记,这非常难看。 (当然,用户没有看到,但我是整洁的HTML的粉丝)
但是,如果我从to-be-included-xhtml中删除DOCTYPE
和html
标记,则Faces Servlet会抛出一个异常,指出{{1}的前缀ui
没有约束。
有没有人知道,我如何能够包含另一个XHTML页面没有多个ui:fragment
和DOCTYPE
s?
答案 0 :(得分:3)
你应该看一下ui:composition标签。 我们还使用ui:include来包含jsf2页面,并解决你遇到的问题我相信你可以通过添加ui:composition标签来改变你所包含的页面,如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=".." xmlns:ui="..." ...>
<ui:composition>
<ui:fragment rendered="${foo}">
some html code
</ui:fragement>
<ui:fragment rendered="${!foo || bar}">
some more html code
</ui:fragement>
</ui:composition>
</html>