====== How-To: Eigene Tags in der Suchmaske hinzufügen ======
**Problem:**
Die vorhandenen Tags und ihre Optionen reichen nicht aus, um dynamisch den richtigen HTML-Code zu generieren.
**Lösungsansatz:**
Neue Tags können via Java hinzugefügt werden und anschließend bei SimpleServer/Tomcat registriert werden.
**Vorteile:**
* Keine Einschränkungen in der Umsetzbarkeit von dynamisch generierten Inhalten
**Nachteile:**
* Java-Kenntnisse erforderlich.
**Autor:**
Benjamin Pick https://github.com/benjaminpick
===== Download =====
* Ein Beispiel der Umsetzung befindet sich unter contrib/crawler-thumbnails.
===== Anleitung =====
Angenommen, Sie möchten folgenden Tag in ihren JSPs benutzen:
Dafür erstellen wir eine Klasse ''HelloworldTag'' im package ''some.example''. (Der name der Klasse wird durch den Tagnamen festgelegt. wäre Klasse ''World'' im package ''some.example.hello'')
package some.example;
import net.sf.regain.RegainException;
import net.sf.regain.util.sharedtag.PageRequest;
import net.sf.regain.util.sharedtag.PageResponse;
import net.sf.regain.util.sharedtag.SharedTag;
public class HelloworldTag extends SharedTag
{
public void printEndTag(PageRequest request, PageResponse response) throws RegainException
{
response.print("Hello, World!");
}
}
Jetzt kompilieren wir diese Klasse mit der verwendeten Regain-Version:
javac -classpath path/to/build/regain.jar src/some/example/HelloworldTag.java
Das weitere Vorgehen hängt davon ab, ob die Desktop- oder Server-Version verwendet wird. (Natürlich funktioniert auch beides).
==== Desktop-Suche ====
//(benötigt regain Version 1.7.9 oder höher)//
Damit die Desktop-Suche funktioniert, muss der Tag-Namespace ("my_tag") unter [[de:config:desktopconfiguration.xml]] hinzugefügt werden:
net.sf.regain.search.sharedlib
net.sf.regain.ui.desktop.config.sharedlib
net.sf.regain.ui.desktop.status.sharedlib
some.example
Damit die generierte .class-Datei geladen wird, können wir sie entweder der regain.jar hinzufügen (wenn Sie sie selbst [[de:project_info:building_regain]]), oder in als ''my_tag.jar'' in den ''web/taglib''-Ordner stecken.
jar c0f my_tag.jar some/example/*.class
==== Server-Suche ====
Zuerst müssen wir die neuen Tags deklarieren. Wir erstellen eine Datei ''web/taglib/mytag.tld'' (Name wählbar). (Siehe ''web/server/regain-search.tld'' als Template.)
1.0
1.1
my_tag
Example Taglib
Shows "Hello, World!"
helloworld
some.example.server.HelloworldTag
empty
Dann fügen wir diese Deklaration der JSP hinzu (ganz oben):
<%@taglib uri="taglib/mytag.tld" prefix="my_tag" %>
Wir müssen noch eine Wrapper-Klasse schreiben (''some/example/server/HelloworldTag.java''):
package some.example.server;
import net.sf.regain.util.sharedtag.taglib.SharedTagWrapperTag;
public class HelloworldTag extends SharedTagWrapperTag {
public HelloworldTag() {
super(new some.example.HelloworldTag());
}
}
(Kompilieren am besten mit den original-Sourcen von Regain ... ant runtime-server und dann build/classes und build/included-lib-classes/common als Classpath verwenden.)
Jetzt muss Regain nur noch (beide) Klassen laden. Entweder in die .war packen, oder nach dem deployen nach ''WEB-INF/classes'' (some/example/...) oder nach ''WEB-INF/lib'' (als my_tag.jar) kopieren. Der Servlet-Container muss neu gestartet werden.
===== Siehe auch =====
* [[:de:howto]] - Übersicht über alle How-Tos
* https://github.com/benjamin4ruby/java-thumbnailer - Thumbnails der Dateien erstellen und anzeigen