2 votes

Sortie de plusieurs lignes dans un TextArea avec JSP

Comment puis-je afficher ma liste dans un TestArea, ligne après ligne, sans espace supplémentaire ?

this
that
the
other

Voici ma tentative :

<div class="text">
    <label for="output_string">Output:</label> `
    <textarea rows="10" cols="20">
        <c:forEach var="x" items="${messagelist}">${x}</c:forEach>
    </textarea>
</div>

2voto

Pointy Points 172438

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.

0voto

Just do eat Points 15
<c:set var="xv"></c:set>
<c:forEach items="${messagelist}" var="x">
    <c:if test="${not empty x}">
    <c:choose>
        <c:when test="${idx.first}"><c:set var="xv" value="${x}"></c:set></c:when>
        <c:otherwise><c:set var="xv" value="${xv},${x}"></c:set></c:otherwise>
    </c:choose>
    </c:if>
</c:forEach>
<textarea cols="45" rows="5">${xv}</textarea>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X