29 votes

Comment puis-je remplacer les caractères de nouvelle ligne en utilisant JSP et JSTL?

J'ai une liste d'objets bean passée dans ma page JSP, et l'un d'eux est un champ de commentaire. Ce champ peut contenir des sauts de ligne, et je veux les remplacer par des points-virgules en utilisant JSTL, afin que le champ puisse être affiché dans une zone de texte. J'ai trouvé une solution, mais elle n'est pas très élégante. Je la posterai ci-dessous comme une possibilité.

40voto

parkerfath Points 644

Voici une solution que j'ai trouvée. Cela ne semble pas très élégant, cependant :

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<% pageContext.setAttribute("newLineChar", "\n"); %>

${fn:replace(item.comments, newLineChar, "; ")}

18voto

BalusC Points 498232

Il suffit d'utiliser la fonction fn:replace() pour remplacer \n par ;.

${fn:replace(data, '\n', ';')}

Dans le cas où vous utilisez l'implémentation EL d'Apache au lieu de l'implémentation EL de référence d'Oracle (c'est-à-dire lorsque vous utilisez Tomcat, TomEE, JBoss, etc au lieu de GlassFish, Payara, WildFly, WebSphere, etc), vous devez ré-échapper le backslash.

${fn:replace(data, '\\n', ';')}

9voto

Bousch Points 165

Cette solution est plus élégante que votre propre solution qui consiste à définir directement l'attribut pagecontext. Vous devriez utiliser la balise pour cela :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

${fn:replace(data, newLine, "; ")}

Par ailleurs : ${fn:replace(data, "\n", ";")} NE fonctionne PAS.

7voto

andy Points 885

Ceci est similaire à la réponse acceptée (car elle utilise Java pour représenter le saut de ligne plutôt que EL) mais ici l'élément est utilisé pour définir l'attribut :

" />
${fn:replace(myAddress, newline, "")}

L'extrait suivant fonctionne également, mais la deuxième ligne de l'élément ne peut pas être indentée (et peut sembler plus moche) :

    ${fn:replace(myAddress, newline, "")}

3voto

Geekygecko Points 1984

Vous pourriez créer votre propre fonction JSP. http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPTags6.html

C'est à peu près ce que vous devez faire.

Créez un fichier de descripteur de bibliothèque de balises
/src/META-INF/sf.tld

  1.0
  sf
  http://www.stackoverflow.com

    clean
    com.stackoverflow.web.tag.function.TagUtils

      java.lang.String clean(java.lang.String)

Créez une classe Java pour la logique des fonctions.
com.stackoverflow.web.tag.function.TagUtils

package com.stackoverflow.web.tag.function;

import javax.servlet.jsp.tagext.TagSupport;

public class TagUtils extends TagSupport {
  public static String clean(String comment) {
    return comment.replaceAll("\n", "; ");
  }
}

Dans votre JSP, vous pouvez accéder à votre fonction de la manière suivante.

<%@ taglib prefix="sf" uri="http://www.stackoverflow.com"%>
${sf:clean(item.comments)}

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