Evaluar variable antes de pasar a JSP Tag Handler
Pregunta
Al intentar utilizar una biblioteca de etiquetas JSP personalizadas, tengo una variable definida en JSP que me gustaría ser evaluados antes de ser pasado a la biblioteca de etiquetas. Sin embargo, me parece que no puede conseguir que funcione. Aquí hay una versión simplificada de mi JSP:
<% int index = 8; %>
<foo:myTag myAttribute="something_<%= index %>"/>
El método doStartTag()
de mi TagHandler
utiliza flujo de salida de la pageContext de escribir según el atributo introducido:
public int doStartTag() {
...
out.println("Foo: " + this.myAttribute);
}
Sin embargo, la salida que veo en mi margen de beneficio final es:
Foo: something_<%= index %>
en lugar de lo que quiero:
Foo: something_8
Mi definición de biblioteca de etiquetas para el atributo es:
<attribute>
<name>myAttribute</name>
<required>true</required>
</attribute>
He tratado de configurar el atributo con rtexprvalue
tanto true
y false
, pero tampoco funcionó. ¿Hay alguna manera de configurar el atributo de manera que se evalúa antes de ser enviado a la Handler? O voy sobre este totalmente equivocado?
Soy relativamente nuevo a etiquetas JSP, así que estoy abierto a alternativas para la solución de este problema. Además, me di cuenta de que el uso de scriptlets en JSP está mal visto, pero estoy trabajando con un poco de código heredado aquí, así que estoy un poco atascado con ella por ahora.
Editar
También he intentado:
<foo:myTag myAttribute="something_${index}"/>
que no funciona bien - sólo se da salida a something_${index}
Solución
No creo que se puede utilizar un <%= ... %>
dentro de un atributo en una etiqueta personalizada, a menos que su <%= ... %>
es todo el contenido del valor del atributo. ¿El siguiente trabajo para usted?
<% int index = 8; %>
<% String attribValue = "something_" + index; %>
<foo:myTag myAttribute="<%= attribValue %>"/>
EDIT: Creo que el <% ... %>
dentro del atributo de etiqueta personalizada sólo puede contener un nombre de variable. No cualquier expresión de Java.
Otros consejos
Para mantener su código JSP limpia y ordenada, evitar secuencias de comandos cuando sea posible. Creo que esta es la mejor forma de hacerlo:
<foo:myTag >
<jsp:attribute name="myAttribute">
something_${index}
</jsp:attribute>
</foo:myTag >
Si su etiqueta también contiene un cuerpo, vas a tener que cambiarlo desde
<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}"/>