2009-04-24 3 views
3

Beim Versuch, eine benutzerdefinierte JSP-Tag-Bibliothek zu verwenden, habe ich in JSP eine Variable definiert, die ausgewertet werden soll, bevor sie an die Tag-Bibliothek übergeben wird. Aber ich kann es nicht zur Arbeit bringen. Hier ist eine vereinfachte Version meiner JSP:Variable vor Übergabe an JSP-Tag-Handler auswerten

<% int index = 8; %> 

<foo:myTag myAttribute="something_<%= index %>"/> 

Die doStartTag() Methode meines TagHandler verwendet den Ausgangsstrom des pagecontext schreiben auf dem eingegebenen Attribut basiert:

public int doStartTag() { 
    ... 
    out.println("Foo: " + this.myAttribute); 
} 

jedoch der Ausgang ich in meinem letzten sehen Markup ist:

Foo: something_<%= index %> 

statt, was ich will:

Foo: something_8 

Meine Tagbibliothek Definition für das Attribut ist:

<attribute> 
    <name>myAttribute</name> 
    <required>true</required> 
</attribute> 

Ich habe versucht, das Attribut mit rtexprvalue sowohl true und false, aber weder gearbeitet zu konfigurieren. Gibt es eine Möglichkeit, das Attribut so zu konfigurieren, dass es ausgewertet wird, bevor es an den Handler gesendet wird? Oder mache ich das total falsch?

Ich bin relativ neu bei JSP-Tags, also bin ich offen für Alternativen zur Lösung dieses Problems. Außerdem ist mir klar, dass die Verwendung von Scriptlets in JSP verpönt ist, aber ich arbeite hier mit Legacy-Code, so dass ich vorerst daran festhalte.

Edit:

ich auch versucht:

<foo:myTag myAttribute="something_${index}"/> 

, die funktioniert auch nicht - es gibt nur something_${index}.

Antwort

6

Ich glaube nicht, dass Sie ein <%= ... %> innerhalb eines Attributs in einem benutzerdefinierten Tag verwenden können, es sei denn, Ihre <%= ... %> der gesamte Inhalt des Attributwertes. Funktioniert das Folgende für Sie?

<% int index = 8; %> 
<% String attribValue = "something_" + index; %> 

<foo:myTag myAttribute="<%= attribValue %>"/> 

EDIT: Ich glaube, die <% ... %> im Attribut benutzerdefinierten Tag nur einen Variablennamen enthalten. kein Java-Ausdruck.

0

<foo:myTag myAttribute="something_${index}"/>

+0

I‘ Das habe ich auch selbst versucht, und auch bei mir hat es nicht funktioniert. Ich werde die Frage aktualisieren - aber danke für die Antwort. –

2

Um Ihren JSP-Code sauber und übersichtlich zu halten, sollten Sie möglichst keine Skripte verwenden. Ich denke, dass dies die bevorzugte Art und Weise ist, es zu tun:

<foo:myTag > 
    <jsp:attribute name="myAttribute"> 
    something_${index} 
    </jsp:attribute> 
</foo:myTag > 

, wenn Ihr Tag auch einen Körper enthält, werden Sie es ändern von

müssen
<foo:myTag myAttribute="<%= attribValue %>"> 
    body 
</foo:myTag > 

zu

<foo:myTag > 
    <jsp:attribute name="myAttribute"> 
    something_${index} 
    </jsp:attribute> 
    <jsp:body> 
    body 
    </jsp:body> 
</foo:myTag > 
+1

Vielen Dank für diese Erinnerung. Das habe ich im JSP-Taglib-Tutorial nie gefunden. – cringe