[JAVA] Beispiel zum Erstellen eines benutzerdefinierten Tags für JSP

Ich habe früher benutzerdefinierte Tags für JSP erstellt, daher handelt es sich eher um ein Beispiel als um ein Memo. Bitte akzeptieren Sie (´ ・ ω ・ `)

Beginnen wir mit der Anforderungsdefinition! Es ist einfach, weil es ein Beispiel ist, aber ich habe es wie folgt zusammengefasst.

--Datenbank-Suchergebnisse als Pulldown anzeigen

Vorbereitung: Erstellen Sie eine DB-Zugriffsebene und ein Servlet.

Da wir ein benutzerdefiniertes Tag erstellen möchten, das die DB-Suchergebnisse anzeigt, erstellen wir eine Klasse, die den Zugriff auf die DB und die Suchergebnisse anzeigt. Wir brauchen auch ein Servlet, um jsp anzuzeigen, also erstellen Sie dies auch. Das Folgende ist der Beispielcode, aber die __package-Deklaration, die Importdeklaration, Getter und Setter werden weggelassen, weil sie redundant sind. __ Ich würde mich jedoch freuen, wenn Sie die Paketstruktur anhand des am Anfang gezeigten Bildes beurteilen könnten (´ ・ ω ・ `).

image

DB.java


/**
 *Zugriffsklasse auf die Datenbank. Da es sich jedoch um ein Beispiel handelt, handelt es sich um eine Scheinimplementierung.
 */
public class DB implements Serializable {    
    private List<Row> rows;
    
    /**
     *Konstrukteur. Erstellen Sie eine Instanz und geben Sie die Anfangsdaten in die Schein-DB ein.
     */
    public DB() {
        this.rows = new ArrayList<>();
        
        this.rows.add(new Row("group1", "A", "AAA"));
        this.rows.add(new Row("group1", "B", "BBB"));
        this.rows.add(new Row("group1", "C", "CCC"));
        this.rows.add(new Row("group1", "D", "DDD"));
        this.rows.add(new Row("group1", "E", "EEE"));
        
        this.rows.add(new Row("group2", "a", "ah ah"));
        this.rows.add(new Row("group2", "b", "Gut"));
        this.rows.add(new Row("group2", "c", "Uuu"));
        this.rows.add(new Row("group2", "d", "ja Ja"));
        this.rows.add(new Row("group2", "e", "Oh oh"));
    }
    
    /**
     *Durchsuchen Sie die Datenbank mit der Gruppe als Schlüssel.
     * @Parametergruppen-Gruppenspaltenwert
     * @Suchergebnisse zurückgeben
     */
    public List<Row> select(String group) {
        return rows.stream()
                .filter(row -> row.getGroup().equals(group))
                .collect(Collectors.toList());
    }
}

Row.java


/**
 * com.sample.db.Eine Bean-Klasse, die eine Zeile in der Datenbank angibt, die von der DB-Klasse angegeben wird.
 */
final public class Row implements Serializable {
    private String group;
    private String id;
    private String name;

    public Row(String group, String id, String name) {
        this.group = group;
        this.id = id;
        this.name = name;
    }
}

SampleServlet.java


/**
 * sample.Ein Servlet zur Anzeige von jsp.
 */
@WebServlet("/sample")
public class SampleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/sample.jsp");
        dispatcher.forward(request, response);
    }
}

Implementieren Sie einen Tag-Handler.

Nachdem die Voraussetzungen erfüllt sind, implementieren Sie einen Tag-Handler, der eine Java-Klasse ist, die Ihrem benutzerdefinierten Tag entspricht. Der Tag-Handler wird durch Implementieren der Schnittstelle "javax.servlet.jsp.tagext.Tag" realisiert, und der Beispielcode lautet wie folgt.

Select.java


public class Select implements Tag {
    
    private Tag parent;
    private PageContext pageContext;
    private String group;
    
    @Override
    public int doStartTag() throws JspException {
        return Tag.SKIP_BODY; //Dieses Tag hat kein Body-Element.
    }
    
    @Override
    public int doEndTag() throws JspException {
        //Suche DB basierend auf Gruppe.
        DB db = new DB();
        List<Row> rows = db.select(this.group);
        
        //Ein Auswahl-Tag wird dynamisch basierend auf den Suchergebnissen in der Datenbank generiert.
        String select = rows.stream().map(row -> {
            String id = row.getId();
            String name = row.getName();
            
            return String.format("<option value=\"%s\">%s</option>", id, name);
        }).collect(Collectors.joining("", "<select>", "</select>"));
        
        //Generieren Sie das generierte Auswahl-Tag dynamisch.
        try {
            JspWriter out = this.pageContext.getOut();
            out.print(select);
        } catch (IOException e) {
            throw new JspException(e);
        }
        
       return Tag.EVAL_PAGE; 
    }
    
    @Override
    public void release() {
    }
    
    @Override
    public Tag getParent() {
        return this.parent;
    }
    
    @Override
    public void setParent(Tag parent) {
        this.parent = parent;
    }
   
    @Override
    public void setPageContext(PageContext pageContext) {
        this.pageContext = pageContext;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }
}

Zusätzlich gab es hier die folgenden zwei "Anpassungspunkte".

Bereiten Sie die tld-Datei vor.

Jetzt, da wir einen Tag-Handler haben, der in der Java-Welt ansässig ist, müssen wir den Tag-Handler mit einem Tag verbinden, der in der JSP-Welt ansässig ist. Es ist die tld-Datei, die dies festlegt, und ein Beispiel davon ist unten gezeigt. Die Erweiterung ist tld, aber in Wirklichkeit ist es im XML-Format.

sample.tld


<?xml version="1.0" encoding="UTF-8"?>

<taglib 
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0">

  <tlib-version>1.0</tlib-version>
  <short-name>sample</short-name>

  <tag>
    <name>select</name>
    <tag-class>com.sample.tag.Select</tag-class>
    <body-content>empty</body-content>
    <attribute>
        <name>group</name>
        <required>true</required>
    </attribute>
  </tag>
</taglib>

Erstellen und Bereitstellen einer JSP-Datei.

Erstellen Sie anschließend eine JSP-Datei mit Ihrem eigenen Tag und stellen Sie die Anwendung auf dem Server bereit.

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="sample.tld" prefix="sample" %>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Sample</title>
    </head>
    <body>
        <h1>JSP Sample</h1>
        <p><sample:select group="group1" /></p>
        <p><sample:select group="group2" /></p>
    </body>
</html>

Wenn Sie schließlich mit einem Webbrowser usw. auf "/ jsp / sample" zugreifen, um das Ergebnis zu überprüfen, sollte die Webseite angezeigt werden, die durch den folgenden Quellcode ausgedrückt wird.

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Sample</title>
    </head>
    <body>
        <h1>JSP Sample</h1>
        <p>
            <select>
                <option value="A">AAA</option>
                <option value="B">BBB</option>
                <option value="C">CCC</option>
                <option value="D">DDD</option>
                <option value="E">EEE</option>
            </select>
        </p>
        <p>
            <select>
                <option value="a">ah ah</option>
                <option value="b">Gut</option>
                <option value="c">Uuu</option>
                <option value="d">ja Ja</option>
                <option value="e">Oh oh</option>
            </select>
        </p>
    </body>
</html>

Ende (`・ ω ・ ´) Shakin

Recommended Posts

Beispiel zum Erstellen eines benutzerdefinierten Tags für JSP
Einfache Möglichkeit, benutzerdefinierte JSP-Tags zu erstellen
So erstellen Sie überall eine H2-Datenbank
So erstellen Sie Pagenationen für das "Kaminari" -Array
[Spring Boot] So erstellen Sie ein Projekt (für Anfänger)
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
[Für diejenigen, die Portfolios erstellen] Verwendung von Font-Awesome-Rails
Ausführen des WebCamCapture-Beispiels von NyARToolkit für Java
Ich möchte eine generische Anmerkung für einen Typ erstellen
So erstellen Sie Docker-Compose
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
So erstellen Sie ein leichtes Container-Image für Java-Apps
Beispiel zum Erstellen einer GUI-Anwendung mit JavaFX + IntelliJ + Scene Builder
[Für diejenigen, die Portfolios erstellen] Verwendung von Chart Kick
Beispiel zum Erstellen eines Einmalkennworts auf Server- und Clientseite
[Für diejenigen, die Portfolios erstellen] So lassen Sie Zeichenketten weg
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
So erstellen und starten Sie eine Docker-Datei für Payara Micro
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0