4

我想在另一个模板中使用 Facelets 模板。目前我有一个“基本”模板,到目前为止已经足够我完成的所有页面。它有一个顶部和一个内容区域。

顶部具有徽标、菜单、登录/注销功能,而内容区域则显示内容。

现在我需要做另一个页面(保存用户个人资料信息),我想在左侧有一个菜单并在右侧显示结果。此页面应插入基本模板内容区域。

是否可以创建一个定义这两个区域(profile_left 和 profile_content)的新模板,并以某种方式仍然使用基本模板?

我看不出为什么我不能只复制基本模板中的代码并添加我想要的新“定义”(profile_left 和 profile_content),但我仍然想知道是否可以继续使用原始基本模板。

4

1 回答 1

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>

也可以看看:

如何使用 JSF 2.0 Facelets 在 XHTML 中包含另一个 XHTML?

于 2012-09-27T14:17:36.880 回答