使用SpringMVC和tile时如何为父模板准备数据

时间:2015-06-17 04:57:18

标签: spring-mvc tiles

我计划在SpringMVC应用程序中使用apache tiles。 父模板具有动态标题和左侧栏。这些内容还需要来自数据库的模型数据。因此,每个请求都需要准备这些数据,例如用户菜单。

我不认为这些数据准备应该放在每个SpringMVC控制器的方法中。

那么,有没有好的做法呢?

1 个答案:

答案 0 :(得分:0)

我使用全局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="/path/to/your/header.jsp" />
        <put-attribute name="body" value="/path/to/your/sidebar.jsp" />
        <put-attribute name="footer" value="/path/to/your/body.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="sidebar">
        <tiles:insertAttribute name="sidebar" />
    </div>
    <div class="body">
        <tiles:insertAttribute name="body" />
    </div>

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

希望这可能有所帮助