Bei eine eienen Tag auf einen Parent zugreifen.

Status
Nicht offen für weitere Antworten.

BlackReloaded

Aktives Mitglied
Hallo,

ich versuche mir gerade einen eigene TagLibrary zu schreiben, dabei stoße ich auf folgendes Problem:

Ich benötige in einer Struktur wie dieser,
Code:
<myjsp:Template name="ganzneu">
          <myjsp:li name="Google" value="http://www.google.de" />
</myjsp:Template>
in der li Struktur die Attribute des Darüberliegenden-Elementes, also TemplateHeader. Die Frage die Sich mir Stellt ist wie soetwas zu bewerkstelligen ist? Es gibt zwar eine Methode getParent(), aber bei dieser bekomme ich ein null zurück.

Mein Code für die beiden Tags sieht wie folgt aus:

Code:
public class ListItem extends BodyTagSupport {

    private String name;
    private String value;
    private String tar;

    public String getTarget() {
        return tar;
    }

    public void setTarget(String tar) {
        this.tar = tar;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public int doStartTag() throws JspTagException {
        return SKIP_BODY;
    }

    @Override
    public int doAfterBody() throws JspTagException {
        return SKIP_BODY;
    }

    @Override
    public int doEndTag() throws JspTagException {
        StringBuffer buffer = new StringBuffer();
        buffer.append("[*]<a href=\"");
        buffer.append(value);
        buffer.append("\"");
        if (tar != null && !tar.equals("")) {
            buffer.append(" target=\"");
            buffer.append(tar);
            buffer.append("\"");
        }
        buffer.append(">");
        buffer.append(name);
        buffer.append("</a>\n");
        JspWriter jw = this.pageContext.getOut();
        BodyContent out = new BodyContentImpl(jw);
        if (out != null) {
            try {
                out.getEnclosingWriter().write(buffer.toString());
                System.out.println("ListItem:" + buffer.toString());
            } catch (IOException ex) {
                Logger.getLogger(ListItem.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        this.setBodyContent(out);
        return EVAL_PAGE;
    }
}

und

Code:
public class Template extends BodyTagSupport {

    private String template;
    private String title;

    public String getTemplate() {
        return template;
    }

    public void setTemplate(String template) {
        this.template = template;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public int doStartTag() throws JspTagException {
        return EVAL_BODY_BUFFERED;
    }

    @Override
    public int doAfterBody() throws JspTagException {
        BodyContent bc = this.getBodyContent();
        if (bc != null) {
            try {
                StringBuffer buffer = new StringBuffer();
                buffer.append("<html>\n\t<head>\n\t\t<title>");
                buffer.append(title);
                buffer.append("</title>\n\t</head>\n\t<body>\n");
                buffer.append(bc.getString());
                buffer.append("\n\t</body>\n</html>");
                bc.clearBody();
                bc.getEnclosingWriter().write(buffer.toString());
            } catch (IOException ex) {
                Logger.getLogger(Template.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return SKIP_BODY;
    }

    @Override
    public int doEndTag() throws JspTagException {
        return EVAL_PAGE;
    }

    @Override
    public void setParent(Tag t) {
        super.setParent(t);
        System.out.println("Ich war hier"+t);
    }
}

Noch etwas, gibt es eine öglichkeit anzugeben welche Tags folgen müssen? z.B. es müssen 0...1 li Tags in dem Template Tag vorhanden sein?

Gruß
Marc
 

BlackReloaded

Aktives Mitglied
Hallo,

ich hatte schon versuch in die Apache Tag Library zu gucken, leider konnte ich die entprechenden stellen nicht ausfindigachen.

Hast du für die strucs einen Tipp für ich? Welchen Tag man gucken könnte und wo an die Src einsehen kann?

Gruß Marc
 

rico

Mitglied
Hi,

es gibt 2 Hilfsmethoden in der Klasse javax.servlet.jsp.tagext.TagSupport

Code:
TagSupport.getParent() 
TagSupport.findAncestorWithClass(Tag from, java.lang.Class klass)

diese sollten dir weiterhelfen.

Noch etwas, gibt es eine öglichkeit anzugeben welche Tags folgen müssen?

Sowas gibt es nicht, du könntest höchstens probieren das selbst zu implementieren.
Also z.B. das du den BodyContent prüfst und diesen nur "renderst" wenn er ein [*] enthält.

LG rico
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Wie eine Chatprotokoll realisieren? Web Tier 13
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
S JSF Eine XHTML-Datei in zwei andere XHTML integrieren Web Tier 0
V Wie baue ich eine Ajax Webanwendung? Suche Beispielanwendung (UML) eines AJAX Service Web Tier 0
X JSF - eine Liste aller Sessions, Instanzen bzwFacesContexte bekommen? Web Tier 4
M JSP Mit JSP eine SQLite Datenbank editieren? Web Tier 1
P JSF Eine JSF-Applikation in Drupal darstellen - Möglich? Web Tier 5
T JSF Primefaces beim öffnen eines p:dialog wird eine neue View ManagedBean erstellt Web Tier 2
J Was ist denn eine index.jsp seite ? Web Tier 5
M rendered ruft eine Methode auf, andere aber nicht Web Tier 15
M JSP Objekt in eine JavaBean übergeben Web Tier 7
N rich:extendedDataTable hat eine Spalte zuviel Web Tier 4
T Richtige Aussgabe in eine HTML mit JSF Web Tier 2
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
C Aktualisieren eine Tabelle mit OnetoMany-Beziehuung Web Tier 6
Scorpi41 RequestDispatcher eine anderes Projekt zugreifen Web Tier 8
C GWT: Eine Variable in allen Widgets Web Tier 6
M JSF: Bei Seitenaufruf eine Methode starten Web Tier 15
I Eine Bean von einer anderen Bean aufrufen Web Tier 2
L Unter JSP eine XML Datei erstellen Web Tier 3
I Export in eine CSV - Datei und PDF Web Tier 5
2 Pro Action nur eine ActionForm? Web Tier 4
H Gibt es für das message-bundle eine Standard - Ordnung? Web Tier 2
S nur eine Message auf Faceskontext ausgeben Web Tier 2
O eine .do-File als welcome-file im web.xml Web Tier 4
T Was nehmen für eine Datenbankapplikation mit Webinterface Web Tier 5
G Eine Instanz pro Managed Bean? Web Tier 2
F Beim Aufruf von einer JSF Seite eine Methode ausführen Web Tier 9
R Servlet Fetch API gibt einen leeren String aus Web Tier 6
J Welches Programm visualisiert mir einen html-Dom als Baumdiagram? Web Tier 5
E Wie kann ich einen zweiten Suchfeld implementieren? Web Tier 1
G Jetty 9: Mehr als einen Authenticator? Web Tier 0
N Wie mache ich in einer xhtml (JSF) einen redirect? Web Tier 3
A Hat Tomcat einen Cache? Web Tier 5
P Ist es möglich einen Returnwert einem httpRequest zu übergeben Web Tier 3
J Wie realisiert man einen HTML-Chat? Web Tier 3
A JSF und Struts unter einen Hut bringen (SingleSignOn) Web Tier 2

Ähnliche Java Themen

Neue Themen


Oben