Domanda

Quando si tenta di utilizzare una libreria di tag personalizzati JSP, ho una variabile definita in JSP che vorrei essere valutata prima di essere passato per la libreria di tag. Tuttavia, non riesco a farlo funzionare. Ecco una versione semplificata del mio JSP:

<% int index = 8; %>

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

Il metodo doStartTag() della mia TagHandler utilizza flusso di output del pageContext di scrivere in base all'attributo immesso:

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

Tuttavia, l'output vedo nella mia marcatura finale è:

Foo: something_<%= index %>

al posto di quello che voglio:

Foo: something_8

Il mio tag definizione di libreria per l'attributo è:

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

Ho provato a configurare l'attributo con rtexprvalue sia true e false, ma nessuno dei due ha lavorato. C'è un modo per configurare l'attributo in modo che sia valutato prima di essere inviato al gestore? O sono io andare su questo totalmente sbagliato?

Sono relativamente nuovo per tag JSP, quindi sono aperto a soluzioni alternative per risolvere questo problema. Inoltre, mi rendo conto che l'utilizzo scriptlets in JSP è visto di buon occhio, ma sto lavorando con un certo codice legacy qui in modo Sono un po 'attaccato con esso per ora.

Modifica

Ho anche provato:

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

che non funziona o - semplicemente uscite something_${index}

.
È stato utile?

Soluzione

Non credo che è possibile utilizzare un <%= ... %> all'interno di un attributo in un tag personalizzato, a meno che il <%= ... %> è l'intero contenuto del valore di attributo. Fa il seguente lavoro per voi?

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

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

EDIT: Credo che la <% ... %> all'interno dell'attributo tag personalizzato può contenere solo un nome di variabile. Non una qualsiasi espressione Java.

Altri suggerimenti

Per mantenere il codice JSP pulita e ordinata, evitare di scripting quando possibile. Credo che questo sia il modo migliore per farlo:

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

Se il tag contiene anche un corpo, dovrete cambiarlo da

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

a

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top