Voici une hypothèse (que je testerai dans une seconde sur l'une de mes propres pages) :
<c:forEach var='x' items='${messagelist}'><c:out value='${x}\r\n'/></c:forEach>
éditer - Non, cela ne semble pas fonctionner du tout. Cependant, ce qui a fonctionné, c'est que j'ai ajouté une entrée de catalogue de messages comme celle-ci :
linebreak={0}\r\n
Vous pouvez alors utiliser <fmt:message key="linebreak"><fmt:param value="${x}"/></fmt:message>
pour produire la chaîne de caractères terminée par des sauts de ligne.
Notez que JSP placera des espaces avant la première entrée en fonction de l'indentation de votre fichier source .jsp avant la ligne de commande <c:forEach>
Vous devrez donc tout aligner sur le bord gauche si vous ne le souhaitez pas.
Si je devais faire cela souvent, j'écrirais ma propre fonction complémentaire EL pour renvoyer une chaîne de caractères suivie d'un CRLF.
éditer - Si vous voulez écrire un add-on EL, vous avez besoin de deux choses :
- La fonction elle-même, qui doit être un
public static
d'une classe. Je garde une classe appelée "ELFunctions" pour la plupart des miens. Vous pouvez les organiser comme vous le souhaitez.
- Un fichier ".tld", si vous n'en avez pas déjà un. Il devrait se trouver dans votre application web quelque part sous "WEB-INF". Le mien se trouve dans un sous-répertoire appelé "tld", mais vous pouvez le placer n'importe où.
Vous pouvez donc écrire une petite fonction comme celle-ci, dans une classe quelconque :
public static String linebreak(final String msg) {
return msg + "\r\n";
}
Votre fichier ".tld" ressemblerait alors à ceci (en supposant que c'est la seule chose que vous ayez ; si vous avez un fichier ".tld" existant, ajoutez simplement la clause) :
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<description>Your Favorite Description</description>
<display-name>Make Something Up</display-name>
<tlib-version>4.0</tlib-version>
<short-name>whatever</short-name>
<uri>http://yourdomain.com/tld/whatever</uri>
<function>
<description>
Return a string augmented with trailing line break (CR - LF pair)
</description>
<name>linebreak</name>
<function-class>your.package.name.YourClass</function-class>
<function-signature>
java.lang.String linebreak(java.lang.String)
</function-signature>
</function>
(Bon sang, le XML est si ennuyeux.) Quelque part, vous avez probablement déjà un petit fichier qui récupère les balises pour vos pages (pour <c:...>
au moins). À l'intérieur, ou en haut de n'importe quelle page, ajoutez une ligne comme celle-ci :
<%@ taglib prefix="whatever" uri='http://yourdomain.com/tld/tango' %>
I penser que le moteur d'exécution JSP recherche les fichiers ".tld" dans le sous-arbre WEB-INF et les fichiers .jar dans WEB-INF/lib, en se basant sur la chaîne "uri". Quoi qu'il en soit, une fois que vous avez fait cela, dans votre fichier JSP, vous pouvez dire :
<c:forEach var='x' items='${messagelist}'>${whatever:linebreak(x)}</c:forEach>
et il invoquera votre fonction.