0

我有 apache Tiles 布局页面,其中包含 Header、Menu、Body。在此布局中重新加载整个布局令人耳目一新。我希望标题、菜单是静态的,并且只有正文部分应该刷新。

(1)write this tiles configuration into spring xml file.
    <bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"/>

        <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
            <property name="definitions">
                <list>
                    <value>/WEB-INF/layouts/layouts.xml</value>
                    <value>/WEB-INF/layouts/views.xml</value>
                </list>
            </property>
        </bean>

(2)layouts.xml file 
<?xml version="1.0" encoding="UTF-8"?>
 <!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="DefaultTemplate" template="/WEB-INF/views/template/SiteTemplate.jsp">
        <put-attribute name="title"     value="Home" />
        <put-attribute name="header"    value="/WEB-INF/views/template/header.jsp" />
        <put-attribute name="menu"      value="/WEB-INF/views/template/menu.jsp" />
        <put-attribute name="body"      value="" />
        <put-attribute name="footer"    value="/WEB-INF/views/template/footer.jsp" />
    </definition>

</tiles-definitions>

(3)views.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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="index" extends="DefaultTemplate">
        <put-attribute name="body"  value="/WEB-INF/views/index.jsp" />
    </definition>

    <definition name="personList" extends="DefaultTemplate">
        <put-attribute name="body"  value="/WEB-INF/views/personList.jsp" />
    </definition>

</tiles-definitions>

(4)SiteTemplate.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
    <!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">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Spring MVC - Tiles Integration tutorial</title>
        <link rel="stylesheet" href="resources/css/screen.css" type="text/css" media="screen, projection"></link>
        <link rel="stylesheet" href="resources/css/print.css" type="text/css" media="print"></link>
        <!--[if IE]>
        <link rel="stylesheet" href="resources/css/ie.css" type="text/css" media="screen, projection">
        <![endif]-->
    <style>
    body{ margin-top:20px; margin-bottom:20px; background-color:#DFDFDF;}
    </style>
    </head>
    <body>
        <div class="container" style="border: #C1C1C1 solid 1px; border-radius:10px;">
            <!-- Header -->
            <tiles:insertAttribute name="header" />
            <!-- Menu Page -->
            <div class="span-5  border" style="height:400px;background-color:#FCFCFC;">
                <tiles:insertAttribute name="menu" />
            </div>
            <!-- Body Page -->
            <div class="span-19 last">
                <tiles:insertAttribute name="body" />
            </div>
            <!-- Footer Page -->
            <tiles:insertAttribute name="footer" />
        </div>
    </body>
    </html>

(5)menu.jsp

    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
    <ul style="list-style:none;line-height:28px;">

        <li><spring:url value="/index" var="homeUrl" htmlEscape="true" />
            <a href="${homeUrl}">Home</a>
        </li>

        <li><spring:url value="/viewPeson" var="personListUrl" htmlEscape="true" />
            <a href="${personListUrl}">Person List</a>
        </li>

    </ul>

(6)same as write footer.jsp and header.jsp for your requirement.

(7)code for controlller

    @RequestMapping(value="index")
        public String index() {
            return "index";
        }

有什么方法可以防止刷新标题、菜单并仅更新菜单单击上的正文内容,这可以使用 Apache Tiles 3 来实现?

4

2 回答 2

0
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/layouts/layouts.xml</value>
                <value>/WEB-INF/layouts/views.xml</value>
            </list>
        </property>
        <property name="checkRefresh" value="true" />
    </bean>

配置 Tiles 时使用checkrefresh属性。

这将首先加载所有片段,然后从内存缓存/磁盘缓存中加载它们。

您可以使用检查元素检查这一点

但是您的页眉或页脚仍然不会是静态的,而是会从缓存中加载

于 2019-03-23T07:24:42.900 回答
0

在tiles.xml 中,您可以创建多个布局定义。如果您需要更改主体,您可以创建基本布局。可以创建第二个布局,然后扩展基本布局并进行所需的任何更新。在这种情况下,您的标题、页眉、菜单和页脚将相同,但正文将不同。您可以这样编写布局:

<definition name="DefaultTemplate" template="/WEB-INF/views/template/SiteTemplate.jsp">
        <put-attribute name="title"     value="Home" />
        <put-attribute name="header"    value="/WEB-INF/views/template/header.jsp" />
            <put-attribute name="menu"      value="/WEB-INF/views/template/menu.jsp" />
            <put-attribute name="body"      value="" />
            <put-attribute name="footer"    value="/WEB-INF/views/template/footer.jsp" />
</definition>

<defintion name="SecondaryTemplate" extends="DefaultTemplate">
   <put-attribute name="body" value="location_of_your_jsp"/>
</defintion>

第二个模板扩展了您的第一个模板,保留了第一个模板的所有属性,但使用您要为该特定页面引用的 jsp 更新 body 属性。

于 2016-11-17T23:02:14.683 回答