2012-04-12 5 views
0

Wie kann ich meine eigenen Tags verwenden die gleichen Ressourcen (zum Beispiel XML Doc)?JSP-Taglibs verwenden dieselben Objekte

Pseudo-Code:

JSP:

<readxml:getuser/> 
<readxml:getpassword/> 

Java:

public class getpassword(or getuser) extends BodyTagSupport 
{ 
    if(doc) 
    { 
     out.println(doc) 
    } 
    else 
    { 
     doc = builder.build(file) 
     out.println(doc) 
    } 
} 

Ist das überhaupt möglich?

+1

Was versuchen Sie zu erreichen? kannst du genauer sein? Welche Ausgabe willst du? –

+0

Die Ausgabe ist nicht wirklich wichtig. Ich möchte vermeiden, die gesamte XML-Datei zu lesen und für jedes einzelne Tag zu analysieren. –

Antwort

2

Sie können temporäre Daten im Rahmen der aktuellen Anforderung speichern:

public class getpassword(or getuser) extends BodyTagSupport 
{ 
    public int doEndTag() { 
     Doc doc = pageContext.getRequest().getAttribute("doc"); 
     if(doc == null) 
     { 
     pageContext.getRequest().setAttribute("doc", doc = builder.build(file)); 
     } 
     out.println(doc); 
     ... 
    } 
} 

Sie können es auch speichern, in einer Sitzung oder statischen Variablen (abhängig vom Umfang Sie möchten).

+0

OK, ich wusste nicht den Unterschied zwischen dem Speichern von etwas in pageContext und Sitzung. –

0

Erweitern Sie Ihre benutzerdefinierten Tags aus einer allgemeinen Klasse und verschieben Sie das XML-Laden darauf. Da das Dokument nicht wiederholt analysiert werden soll, müssen Sie die Dokumentvariable selbst statisch machen.

Alternativ zum Platzieren der Funktion zum Laden und Speichern von Dokumenten in einer allgemeinen Klasse können Sie sie auch in einer eigenständigen Dienstprogrammklasse implementieren, auf die Sie aus allen relevanten Tags (Supportklassen) verweisen.

+0

Im Prinzip hast du Recht, und ich habe es zuerst versucht, aber die Tag-Klassen sind bereits von einer gemeinsamen Klasse erweitert und ich möchte nicht so tief in das ganze Design eingreifen. –

Verwandte Themen