¿Cómo puedo dar expresiones EL como parámetros de las etiquetas anidadas JSP 2.0?
Pregunta
quiero hacer algo como esto para llamar a una etiqueta JSP 2.0:
<mytags:foo abc="<%=def%>">
<mytags:bar ghi="<%=jkl%>"/>
</mytags:foo>
Cuando Cuerdas def
y jkl
se definen earielr en el archivo JSP. Supongamos que mis archivos de etiquetas se ven así:
foo.tag
:
<%@ tag body-content="scriptless" %>
<%@ attribute name="abc" required="true" %>
<div class="${abc}">
<jsp:doBody/>
</div>
bar.tag
:
<%@ tag body-content="scriptless" %>
<%@ attribute name="ghi" required="true" %>
<div>${ghi}</div>
Quiero la salida a este aspecto:
<div class="def">
<div>jkl</div>
</div>
(suponiendo que el def
las variables y jkl
se inicializa a def
y jkl
, respectivamente, en el archivo JSP que llama.)
La etiqueta externa obtiene su atributo muy bien (<div class="def">
), pero la interior falla.
¿Es esto posible? Estoy recibiendo errores que jkl no se puede resolver.
Solución
Tenga en cuenta el atributo body-content="scriptless"
en la directiva de la etiqueta. Esto significa que el cuerpo rodeado de la etiqueta no puede contener código scriptlet (las cosas <% %>
). Es necesario utilizar EL.
A mí me funciona si cambio de las cosas en el JSP para:
<c:set var="def" value="def"></c:set>
<c:set var="jkl" value="jkl"></c:set>
<mytags:foo abc="${def}">
<mytags:bar ghi="${jkl}"/>
</mytags:foo>
Tenga en cuenta que tengo que añadir
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>