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}

.
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top