Apache tiles V3包含在子页面中

时间:2015-06-26 12:08:18

标签: java spring jsp apache-tiles

我正在尝试使用apache磁贴构建一个Web应用程序。 我使用带有外卡支持的apache tiles V3。

我的tiles.xml看起来像这样:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE tiles-definitions PUBLIC
        "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
        "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

    <definition name="*" template="/resources/tiles/main-layout.jsp">
        <put-attribute name="main" value="/resources/templates/{1}.jsp" />
        <put-attribute name="head-content" value="" />
    </definition>
    <definition name="*/*" template="/resources/tiles/main-layout.jsp">
        <put-attribute name="main" value="/resources/templates/{1}/{2}.jsp" />
        <put-attribute name="head-content" value="" />
    </definition>
    <definition name="*/*/*" template="/resources/tiles/main-layout.jsp">
        <put-attribute name="main" value="/resources/templates/{1}/{2}/{3}.jsp" />
        <put-attribute name="head-content" value="" />
    </definition>
</tiles-definitions>

我有一个主页(main-layout.jsp),包含头部和内容部分。

主管部分:

<head> 
    <link rel="stylesheet" type="text/css" href="${baseCss}" />
    <link rel="stylesheet" type="text/css" href="${messages}" />
    <script src="${jquery}"></script>
    <script src="${jqueryui}"></script>
    <script src="${jquerycookie}"></script>
    <script src="${languagetoggle}"></script>
    <script src="${menuJs}"></script>
    <tiles:insertAttribute name="head-content"  />
</head>

主要部分:

<section class="main-content">
     <tiles:insertAttribute name="main" />
</section>

我的主要部分呈现正确。我可以使用Spring MVC从/hello/world加载,文件world.jsp从de hello文件夹加载。

不,我想在脑袋中添加一些额外的css文件。 我的问题是:我如何从de world.jsp文件中做到这一点?

我已经尝试添加tiles属性并从world.jsp文件加载它:

<tiles:putAttribute name="head-content">
    <spring:url value="/resources/base-theme/css/tables.css" var="tableCss" />
    <link rel="stylesheet" type="text/css" href="${tableCss}">   
</tiles:putAttribute>

但它不起作用。当我谷歌时,我总是来到相同的页面,在de tiles.xml中每个页面都被指定,但是从具有通配符支持的tile V3中不再需要它。有人可以给我一个如何完成它的提示吗?

1 个答案:

答案 0 :(得分:1)

请阅读以下代码以便您理解。 我创建了一个带有全局cssjs文件的默认切片定义。 yourpage.jsp扩展了此定义并向其添加了两个文件:yourpage.jsyourpage.css

<强> tiles.xml

<tiles-definitions>
    <definition name="app.base" template="/path/to/your/layout.jsp">
        <put-attribute name="title" value="Not Found" />
        <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
        <put-attribute name="body" value="/WEB-INF/tiles/body.jsp" />
        <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
        <put-list-attribute name="stylesheets">
            <add-attribute value="/static/resources/css/bootstrap.min.css" />           
            <add-attribute value="/static/resources/css/global.css" />
        </put-list-attribute>
        <put-list-attribute name="javascripts">
            <add-attribute value="/static/resources/js/jquery-2.1.4.min.js" />
            <add-attribute value="/static/resources/js/global.js" />
        </put-list-attribute>
    </definition>
    <definition name="yourpage" extends="app.base">
        <put-attribute name="title" value="Your Page" />
        <put-attribute name="body" value="/path/to/your/yourpage.jsp" />
        <put-list-attribute name="stylesheets" inherit="true">
            <add-attribute value="/static/resources/css/yourpage.css" />
        </put-list-attribute>
        <put-list-attribute name="javascripts" inherit="true">
            <add-attribute value="/static/resources/js/yourpage.js" />
        </put-list-attribute>
    </definition>
</tiles-definitions>

<强> tiles.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<tiles:importAttribute name="stylesheets"/>
<tiles:importAttribute name="javascripts"/>

<!DOCTYPE html>
<html lang="en">
<head>
    <title>
        <tiles:insertAttribute name="title">
        </tiles:insertAttribute>
    </title>

    <!-- stylesheets-->
    <c:forEach var="css" items="${stylesheets}">
       <link rel="stylesheet" type="text/css" href="<c:url value="${css}"/>">
    </c:forEach>
</head>

<body>
    <header>
        <tiles:insertAttribute name="header" />
    </header>
    <div class="body">
        <tiles:insertAttribute name="body" />
    </div>
    <footer>
        <tiles:insertAttribute name="footer" />
    </footer>

    <!-- scripts-->
    <c:forEach var="script" items="${javascripts}">
        <script src="<c:url value="${script}"/>"></script>
    </c:forEach> 
</body>
</html>

希望这可能有所帮助