我想在另一个模板中使用Facelets模板。目前我有一个“基础”模板,到目前为止,我已经完成了所有页面。它有一个顶部和一个内容区域。
顶部有徽标,菜单,登录/注销功能,而内容区域则显示内容。
现在我需要做另一个页面(以保存用户个人资料信息),我想在左边有一个菜单并在右边显示结果。该页面应插入基本模板内容区域。
是否可以创建一个新模板来定义这两个区域(profile_left和profile_content)并以某种方式仍然使用基本模板?
我认为没有理由不能只复制基本模板中的代码并添加我想要的新“定义”(profile_left和profile_content),但我仍然想知道是否可以继续使用原始基本模板
答案 0 :(得分:9)
您可以根据需要从模板扩展。你似乎只想从一个模板或某个东西扩展,这是不正确的。
例如:
/WEB-INF/templates/base.xhtml
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:head>
<title><ui:insert name="title">Default title</ui:insert></title>
</h:head>
<h:body>
<div id="header">Header</div>
<div id="menu">Menu</div>
<div id="content"><ui:insert name="content">Default content</ui:insert></div>
<div id="footer">Footer</div>
</h:body>
</html>
/WEB-INF/templates/profile.xhtml
<ui:composition template="/WEB-INF/templates/base.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:define name="content">
<div id="profile_left"><ui:insert name="profile_left" /></div>
<div id="profile_right"><ui:insert name="profile_right" /></div>
</ui:define>
</ui:composition>
/user.xhtml
<ui:composition template="/WEB-INF/templates/profile.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:define name="title">User profile</ui:define>
<ui:define name="profile_left">
Profile left.
</ui:define>
<ui:define name="profile_right">
Profile right.
</ui:define>
</ui:composition>
How to include another XHTML in XHTML using JSF 2.0 Facelets?