Bewerten Sie Variablen, bevor zu JSP Tag Handler vorbei
Frage
Wenn Sie eine benutzerdefinierte JSP-Tag-Bibliothek zu verwenden versuchen, habe ich eine Variable in JSP definiert, dass ich ausgewertet werden möchte, bevor sie an die Tag-Bibliothek übergeben wird. scheint es jedoch kann ich nicht bekommen zu arbeiten. Hier ist eine vereinfachte Version meiner JSP:
<% int index = 8; %>
<foo:myTag myAttribute="something_<%= index %>"/>
Die doStartTag()
Methode meiner TagHandler
verwendet den Ausgangsstrom des pagecontext auf der Grundlage der eingegebenen Attribute zu schreiben:
public int doStartTag() {
...
out.println("Foo: " + this.myAttribute);
}
Allerdings ist die Ausgabe ich in meinem letzten Markup sehen 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 zu konfigurieren, um mit rtexprvalue
sowohl true
und false
, aber weder gearbeitet. Gibt es eine Weise, die ich das Attribut konfigurieren, so dass es vor dem an den Handler gesendet ausgewertet wird? Oder bin ich über diese gehen völlig falsch?
Ich bin relativ neu in JSP-Tags, also bin ich offen für Alternativen zur Lösung dieses Problems. Auch merke ich, dass Scriptlets in JSP ist verpönt, aber ich arbeite mit einigen Legacy-Code hier so bin ich ein bisschen stecken mit ihm jetzt mit.
Edit:
Ich habe auch versucht:
<foo:myTag myAttribute="something_${index}"/>
die entweder nicht funktioniert - es something_${index}
nur ausgibt
Lösung
Ich glaube nicht, dass Sie ein <%= ... %>
innerhalb eines Attributs in einem benutzerdefinierten Tag verwenden können, es sei denn, Ihr <%= ... %>
der gesamte Inhalt des Attributwertes. Hat die folgende Arbeit für Sie?
<% int index = 8; %>
<% String attribValue = "something_" + index; %>
<foo:myTag myAttribute="<%= attribValue %>"/>
EDIT: Ich glaube, die <% ... %>
innerhalb des benutzerdefinierten Tags Attribut nur einen Variablennamen enthalten. kein Java-Ausdruck.
Andere Tipps
Um Ihren JSP-Code sauber und ordentlich zu halten, vermeiden Scripting, wenn möglich. 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 von ändern müssen
<foo:myTag myAttribute="<%= attribValue %>">
body
</foo:myTag >
<foo:myTag >
<jsp:attribute name="myAttribute">
something_${index}
</jsp:attribute>
<jsp:body>
body
</jsp:body>
</foo:myTag >
<foo:myTag myAttribute="something_${index}"/>