2009-04-17 9 views
3

Ainsi, selon mon livre de référence JSP, ainsi que tous les autres références que je peux trouver sur le web, je suis censé être capable de faire quelque chose comme:Comment faire pour que les attributs dynamiques fonctionnent dans les fichiers de balises JSP?

<%@ tag dynamic-attributes="dynamicAttributesVar" %> 

et puis quand quelqu'un utilise un attribut Je ne définissaient pas dans une directive d'attribut, je devrais être en mesure d'accéder à cet attribut de la carte « de dynamicAttributesVar »:

<%= dynamicAttributesVar.get("someUnexpectedAttribute") %> 

Cependant, cela ne fonctionne pas, du tout; Je viens d'obtenir une erreur "dynamicAttributesVar ne peut pas être résolue" quand j'essaye.

Maintenant, j'ai découvert (en regardant la classe Java généré pour l'étiquette) que je peux « pirater » un des attributs dynamiques travail variable en faisant:

<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %> 

Maintenant que bidouille ne fonctionne pas à moins que j'utilise aussi le paramètre dynamic-attributes sur ma directive tag, il semble donc que le paramètre fasse quelque chose.

Mais ce que je veux savoir est, comment puis-je le faire faire ce qu'il fait pour tous les autres utilisateurs JSP là-bas?

Répondre

4

"dynamicAttributesVar" n'est-il pas le nom de la clé dans le contexte de la page dans laquelle les attributs dynamiques sont placés? Ainsi, vous pouvez faire

<c:out value="${dynamicAttributesVar.someUnexpectedAttributes}"/> 

ou si vous devez utiliser scriptlets:

Map dynamicAttributes = (Map) pageContext.getAttribute("dynamicAttributesVar") 

(Disclaimer: Je n'ai pas essayé, je l'ai juste utilisé des attributs dynamiques dans les balises avec les implémentations Java directes .. mais il semble raisonnable)

+0

Ah, ça fait tellement plus de sens! Votre suggestion a fonctionné, avec une légère modification (j'ai dû utiliser jspContext.getAttribute au lieu de pageContext.get). Merci beaucoup – machineghost

+0

Ah, je vais mettre à jour la réponse pour ça. Cela fait un moment que j'en ai écrit un. – araqnid

5

Juste en essayant d'obtenir un badge pour répondre à une question de quatre ans.

J'ai aussi ce problème et je suis tombé sur de l'aide au O'Reilly pour utiliser JSTL à la place des scriptlets.

L'affiche originale aurait pu utiliser ce code pour obtenir toutes les clés/valeurs:

<c:forEach items="${dynamicAttributesVar}" var="a"> 
${a.key}="${a.value}" 
</c:forEach> 

Cela obtiendrait une valeur spécifique:

<c:out value="${dynamicAttributesVar['someUnexpectedAttribute']}"/> 
Questions connexes