Concaténer les chaînes dans JSP EL?
J'ai une Liste de haricots, dont chacune a une propriété qui est lui-même une Liste d'adresses e-mail.
<c:forEach items="${upcomingSchedule}" var="conf">
<div class='scheduled' title="${conf.subject}" id="scheduled<c:out value="${conf.id}"/>">
...
</div>
</c:forEach>
Ce qui rend un <div>
par bean dans la Liste.
Pour la sous-liste, ce que j'aimerais être capable de faire est de concaténer chacune des entrées dans la liste pour former une Chaîne unique, à afficher en tant que partie de la <div>
's title
attribut. Pourquoi? Parce que nous sommes à l'aide d'une bibliothèque javascript (mootools) pour activer cette <div>
en flottant pointe de l'outil, et de la bibliothèque de tours la title
dans le texte de l'info-bulle.
Donc, si ${conf.subject}
était "Sujet", en fin de compte, je voudrais le title
de la <div>
être "sous réserve: [email protected], [email protected] etc.", contenant toutes les adresses e-mail de la sous-liste.
Comment puis-je faire cela à l'aide de JSP EL? J'essaie de rester loin de mettre scriptlet blocs dans le fichier jsp.
source d'informationauteur matt b
Vous devez vous connecter pour publier un commentaire.
La manière "propre" de le faire serait d'utiliser une fonction. Comme la JSTL
join
fonction ne fonctionnera pas sur unCollection
vous pouvez écrire votre propre sans trop de problème, et de le réutiliser tous sur la place, au lieu de les couper et coller un gros morceau de code en boucle.Vous avez besoin de la fonction de mise en œuvre, et un TLD pour permettre à votre application web savoir où la trouver. Mettre ensemble dans un bol et le déposer dans votre WEB-INF/lib.
Voici les grandes lignes:
com/x/taglib/core/StringUtil.java
META-INF/x-c.tld:
Tandis que le TLD est un peu verbeux, connaître votre chemin autour de l'un est une bonne compétence pour tout développeur qui travaille avec JSP. Et, puisque vous avez choisi un standard comme JSP, pour la présentation, il ya une bonne chance que vous avez des outils qui vont vous aider.
Cette approche a de nombreux avantages par rapport à l'alternative de l'ajout de plus de méthodes pour le modèle sous-jacent. Cette fonction peut être écrit une fois, et réutilisé dans n'importe quel projet. Il fonctionne avec un code source fermé, bibliothèque tierce. Différents délimiteurs peuvent être pris en charge dans des contextes différents, sans polluer un modèle de l'API avec une nouvelle méthode pour chaque.
Le plus important, il prend en charge une séparation de modèle et de la vue-contrôleur de développement rôles. Tâches dans ces deux domaines sont souvent effectuées par des personnes différentes à des moments différents. Le maintien d'un couplage lâche entre ces couches à réduire la complexité et les coûts de maintenance. Quand même un banal changement comme l'utilisation d'un autre délimiteur dans la présentation nécessite un programmeur de modifier une bibliothèque, vous avez un très lourd et coûteux système.
La
StringUtil
classe est le même, que son exposé comme un EL ou non la fonction. Le seul "plus" nécessaire est le TLD, ce qui est trivial; un outil qui pourrait facilement générer.Compris un peu sale manière de faire ceci:
Je viens d'utiliser
<c:set>
à plusieurs reprises, la référence à sa propre valeur, à ajouter/concaténer des chaînes de caractères.Pourriez-vous l'utiliser? Semble comme il veut un tableau au lieu d'une liste..
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/fn/join.fn.html
Si votre sous-liste est une liste de tableaux et pour ce faire:
vous obtenir à peu près ce dont vous avez besoin.
La seule différence est que le titre sera:
"Objet: [[email protected], [email protected] etc].".
Peut-être peut-être assez bon pour vous.
Je pense que c'est ce que vous voulez:
Dans ce cas, j'avais une table de hachage avec onglet ID (clé) et URL (valeur). Le tabAttrs variable n'est pas définie avant cette. Jusqu'à ce qu'il définit la valeur à la valeur actuelle de tabAttrs (" pour commencer), en plus de la clé/valeur de l'expression.
Il suffit de mettre la chaîne coté du var à partir du serveur, comme ceci:
Trop tard!!!
La façon dont les bibliothèques de balises sont mises en œuvre semble avoir été déplacé sur considérablement depuis cette réponse a été posté donc j'ai fini par faire quelques changements drastiques pour obtenir des choses de travail. Mon résultat est:
De La Bibliothèque De Balises De Fichiers:
JoinInts.java
Pour l'utiliser:
Vous pouvez utiliser le EL 3.0 Flux API. Par exemple, si vous avez une liste de chaînes de caractères,
Dans le cas où vous avez une liste d'objets pour les anciens. Personne(prénom, nom) et que vous souhaitez concat une seule propriété de leur (ex-prénom), vous pouvez utiliser la carte,
Dans votre cas vous pouvez utiliser quelque chose comme ça (supprimer le dernier ',' aussi),
Être prudent! Le EL 3.0 Flux API a été finalisé avant la Java 8 Flux API et il est différent de celui que. Ils ne peuvent pas sunc les deux api, car il va se casser la compatibilité ascendante.