2

我是一个长期的 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>

如果我使用这个模板而不定义可选内容,我会得到一个不需要的空框。

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

谁能帮我吗?在我看来,想要使用模板系统做这件事是一件很合理的事情,但这让我很难过。

4

2 回答 2

2

谢谢 mael,当内容适合 ui:param 值属性时,ui:fragment 似乎是要走的路,但我会接受你的第一个建议。我将使用 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>
于 2012-10-03T09:43:46.247 回答
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>
于 2012-10-02T15:01:30.807 回答