So entfernen Sie eine Kachel in Apache-Kacheln für eine bestimmte Ansicht?

Ich möchte wissen, wie eine Kachel aus einer Ansicht entfernt wird. Meine Hauptansicht sieht so aus

Die Kachelkonfiguration besteht aus 4 Teilen: Kopfzeile, Menü, Text und Fußzeile.

Jetzt weiß ich, dass ich, wenn ich eine neue Seite anfordere, die Hauptansicht überschreiben kann, um beispielsweise den Textkörper zu ersetzen, sodass dort andere Inhalte angezeigt werden.

Aber ich möchte in der Lage sein, wenn ich auf den Link im Menü klicke, der mich zu einer Seite führt, die nur eine Kopfzeile und einen Hauptteil hat (kein Menü oder Fußzeile).

Der Benutzer führt dann einen Assistenten aus, mit dem er von einer Seite zur nächsten wechseln kann. Anschließend sollte er wieder zum Hauptlayout zurückkehren.

Und das ist meine Frage: Wie entferne ich das Menü und die Fußzeile aus einer Ansicht? Meine Frage hört hier auf.

Da es nicht viel Dokumentation zu Kacheln gibt, die ich finden konnte, dachte ich, ich würde ein schrittweises Beispiel für jemanden hinzufügen, der Schwierigkeiten hat, ein funktionierendes Beispiel für die Verwendung von Apache Tiles und Spring MVC mit Spring Tool Suite zu finden (Meine Version ist STS 3.2.0).

SCHRITTE Folgen Sie diesen Schritten, um eine einfache Site mit STS zu erstellen

Erstellen Sie ein neues STS-Projekt

Datei >> Neu >> Spring Template Projekt >> Spring MVC Projekt

Wählen Sie die Option „Spring MVC Project“

Geben Sie Ihrem Projekt einen Namen und ein Top-Level-Paket

Dadurch wird ein Projekt erstellt, das wie folgt aussieht

Ändern Sie den POM, um SPRING 3.2.0.RELEASE zu verwenden

Von:

<org.springframework-version>3.1.1.RELEASE</org.springframework-version>

Zu:

<org.springframework-version>3.2.0.RELEASE</org.springframework-version>
Fügen Sie der POM-Datei die folgenden Abhängigkeiten hinzu, um die Apache Tile-Abhängigkeiten einzuschließen
<!-- Tiles -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-api</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-core</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-jsp</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-servlet</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-template</artifactId>
    <version>3.0.1</version>
</dependency> 
Ändern Sie die Datei "servlet-context.xml", um den TilesViewResolver anstelle des Standard-InternalViewResolver zu verwenden
<!-- Remove -->
<beans:bean class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
    <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></beans:property>
    <beans:property name="order" value="0"></beans:property>
</beans:bean>
 
<!-- Add -->
<beans:bean class="org.springframework.web.servlet.view.tiles3.TilesViewResolver">
<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"></beans:property>
    <beans:property name="order" value="0"></beans:property>
</beans:bean>
Fügen Sie den Verweis hinzu, um zu erfahren, wo die Kacheln konfiguriert sind
<beans:bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
    <beans:property name="definitions" value="/WEB-INF/spring/tiles.xml"> </beans:property>
</beans:bean>
Geben Sie nun die Ansicht an - die JSP-Dateien, die zum Angeben der Ansichten verwendet werden würden ... z. die Kopfzeile, das Menü, die Fußzeile und der Text (dies kann der eigentliche Inhalt sein, und normalerweise haben Sie mehr als einen Text, je nachdem, was der Benutzer im Menü angeklickt hat) - das Layout entspricht dem allerersten Bild in diesem Beitrag.

JSP-Dateien, die im Ansichtsordner erstellt wurden, enthalten jeweils den Inhalt

header.jsp

<h2>This is the header</h2>

footer.jsp

<p>This is the footer</p>

content1.jsp

<h1>This is content page 1</h1>
<p>Blah blah content 1</p>

content2.jsp

<h1>This is content page 2</h1>
<p>Blah blah content 2</p>

menu.jsp

<h2>Menu</h2>
    <a href="">Go to home page</a><br/>
    <a href="page1">Display page 1</a><br/>
    <a href="page2">Display page 2</a>
Wenn das Projekt erstellt wird, erstellt es einen Standardcontroller mit dem Namen "HomeController.java". Hiermit legen Sie fest, wohin Sie als Nächstes gehen müssen, wenn Sie auf die Menüelemente klicken. Wenn Sie den Home-Controller öffnen und folgendermaßen ändern
package com.stp.myapp;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
    /**
     * The request mapping has a value. That is what we are 
* requesting for. When opening the site it will request the main 
* page or the index page. The “/” indicates it is the index page.
* In this simple example we simply return the new ModalAndView with 
* the page in the view folder. In This case it is the mainPage.
* The mainPage is the reference of what is configured in the 
* apache tiles configuration – not the actual page that will be 
* displayed. 
     */
        @RequestMapping(value = "/", method = RequestMethod.GET)
        public ModelAndView home(Locale locale, Model model) {
        return new ModelAndView("mainPage");
        }

        /**
         * The request mapping is for page1 (page1 is the value from the menu.
         */

        @RequestMapping(value = "/page1", method = RequestMethod.GET)
        public ModelAndView viewArticle(Locale locale, Model model) {
        return new ModelAndView("displayPageContent1");
        }

        @RequestMapping(value = "/page2", method = RequestMethod.GET)
        public ModelAndView viewEmployees(Locale locale, Model model) {
        return new ModelAndView("displayPageContent2");
    }

}
Jetzt konfigurieren wir die Kacheln

Erstellen Sie eine "tiles.xml" -Datei mit

 <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE tiles-definitions PUBLIC
           "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
           "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<!-- This file has several definitions of page layouts -->
<tiles-definitions>

    <!-- The main definition with the header footer menu and body -->
    <definition name="base.definition" template="/WEB-INF/views/mainTemplate.jsp">
        <put-attribute name="title" value=""></put-attribute>
        <put-attribute name="header" value="/WEB-INF/views/header.jsp"></put-attribute>
        <put-attribute name="menu" value="/WEB-INF/views/menu.jsp"></put-attribute>
        <put-attribute name="body" value=""></put-attribute>
        <put-attribute name="footer" value="/WEB-INF/views/footer.jsp"></put-attribute>
    </definition>

    <!-- Now you can specify as many layours as you want... The name will match the names the --> 
    <!-- HomeController.java returns aka... as we specified it as displayPageContent1 and displayPageContent2 -->
    <!-- You can override each of the base.definition entries. In this we change the page title and display a different -->
    <!-- page as the body. As we didn't override the menu of footer it will display as specified in tha base.defition-->
    <definition name="displayPageContent1" extends="base.definition">
        <put-attribute name="title" value="Page context 1 displaying..."></put-attribute>
        <put-attribute name="body" value="/WEB-INF/views/content1.jsp"></put-attribute>
    </definition>

    <definition name="displayPageContent2" extends="base.definition">
        <put-attribute name="title" value="Employees List"></put-attribute>
        <put-attribute name="body" value="/WEB-INF/views/content2.jsp"></put-attribute>
    </definition>

     <definition name="mainPage" extends="base.definition">
        <put-attribute name="title" value="This is the home page being displayed....."></put-attribute>
        <put-attribute name="body" value="/WEB-INF/views/home.jsp"></put-attribute>
    </definition>

</tiles-definitions>

In der Datei tiles.xml ist als Basisdefinition "mainTemplate.jsp" definiert. Erstellen Sie eine Datei "mainTemplate.jsp" mit dem HTML-Hauptlayout. Die Dateien haben "tiles: insertAttribute", das die Teile des Basislayouts definiert, die in jeder Ansicht überschrieben werden können.

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
    <tiles:insertAttribute name="title" ignore="true"></tiles:insertAttribute>
</title>
</head>
<body>
<table border="1" cellpadding="2" cellspacing="2" align="left">
    <tr>
        <td colspan="2" align="center">
            <tiles:insertAttribute name="header"></tiles:insertAttribute>
        </td>
    </tr>
    <tr>
        <td>
            <tiles:insertAttribute name="menu"></tiles:insertAttribute>
        </td>
        <td>
            <tiles:insertAttribute name="body"></tiles:insertAttribute>
        </td>
    </tr>
    <tr>
        <td colspan="2"  align="center">
            <tiles:insertAttribute name="footer"></tiles:insertAttribute>
        </td>
    </tr>
</table>
</body>
</html>
Am Ende sollte die Dateistruktur so aussehen

Antworten auf die Frage(2)

Ihre Antwort auf die Frage