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é.
Réponses
Trop de publicités?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', ';')}
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.
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, "")}
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)}