Comment puis-je donner des expressions EL en tant que paramètres dans la version 2.0 balises imbriquées?
Question
Je veux faire quelque chose comme ça pour appeler une balise JSP 2.0:
<mytags:foo abc="<%=def%>">
<mytags:bar ghi="<%=jkl%>"/>
</mytags:foo>
Où sont définis def
et jkl
Strings earielr dans le fichier jsp. Supposons que mes fichiers de balises ressemblent à ceci:
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>
Je veux que la sortie ressemble à ceci:
<div class="def">
<div>jkl</div>
</div>
(en supposant que les variables def
et jkl
ont été initialisé à def
et jkl
, respectivement, dans le fichier JSP appelant.)
La balise externe obtient son attribut très bien (<div class="def">
), mais l'intérieure échoue.
Est-ce possible? Je reçois des erreurs qui JKL ne peuvent être résolus.
La solution
Notez l'attribut body-content="scriptless"
dans la directive tag. Cela signifie que le corps est entouré par la balise ne peut pas contenir du code scriptlet (le stuff <% %>
). Vous devez utiliser EL.
Il fonctionne pour moi si je change les choses dans la JSP:
<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>
Notez que je dois ajouter
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>