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

.
War es hilfreich?

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}"/>

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top