如何在div标签中包含可选的facelet模板内容?

时间:2012-10-02 14:53:54

标签: templates jsf-2 facelets

我是一个很长时间的JSP用户,但是facelets新手,我坚持认为这将是一个非常简单的任务。

如何在div标签中包装可选模板内容?

例如,给出以下简化模板:

<?xml version='1.0' encoding='UTF-8' ?>
<html xml:lang="en" lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html">

    <h:head>
        <!-- head stuff here -->
    </h:head>

    <h:body>
        <!-- main body stuff here -->
        <div class="border-box">
            <ui:insert name="optional" />
        </div>
    </h:body>

</html>

如果我在没有定义可选内容的情况下使用此模板,我将收到一个不需要的空框。

我已经找到了一个解决方案,发现同样的问题提出了几次,但没有真正的答案。

任何人都可以帮助我吗?在我看来,想要使用模板系统是一件非常合理的事情,但这让我很难过。

2 个答案:

答案 0 :(得分:2)

谢谢mael,ui:片段似乎是内容适合ui:param值属性的方式,但我会提出你的第一个建议。我将使用ui:decorate模板化包装器。

页面模板:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html">

    <h:head>
        <!-- head stuff here -->
    </h:head>

    <h:body>
        <!-- main body stuff here -->
        <ui:insert name="optional" />
    </h:body>

</html>

包装模板:

<?xml version='1.0' encoding='UTF-8' ?>
<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets">

    <div class="border-box">
        <ui:insert />
    </div>

</ui:composition>

调用:

<?xml version='1.0' encoding='UTF-8' ?>
<ui:composition
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    template="page.xhtml">

    <!-- other ui:defines -->

    <ui:define name="optional">
        <ui:decorate template="wrapper.xhtml">
            <!-- optional content -->
        </ui:decorate>
    </ui:define>

</ui:composition>

答案 1 :(得分:0)

只需删除div并在使用您模板的页面中进行类似的操作:

<!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:ui="http://java.sun.com/jsf/facelets">
<h:head />
<body>
<ui:composition template="template.xhtml">
  <ui:define name="optional">
    <div class="border-box">
        <!-- Content here -->
    </div>
</ui:define>
</ui:composition>
</body>
</html>