h:outputText ne casse pas les caractères \r\n dans de nouvelles lignes
J'ai du texte dans un String
variable qui contient des retours chariot et les nouvelles lignes \r\n
.
text = "Text1\r\nText2\r\nText3";
Je suis de le présenter à l'aide d'un <h:outputtext>
.
<h:outputText value="#{bean.text}" />
Mais il ne reconnaît pas les caractères de nouvelle ligne et montre comme ci-dessous dans le webbrowser.
Texte1 Texte2 Texte3
Pourquoi le <h:outputText>
pas casser \n
dans de nouvelles lignes?
Que dois-je faire? Dois-je remplacer \n
avec <br />
?
- Vous devrez peut-être obtenir le système de valeur de la ligne de séparateur I. E. String ligne = Système.getProperty("line.séparateur");
Vous devez vous connecter pour publier un commentaire.
Retours à la ligne (en HTML sont représentés par
<br />
élément, et non par le\n
caractère. Même plus, ouvrez la moyenne HTML code source par un clic droit, l'Affichage de la Source dans le navigateur et vous allez "voir"\n
sur tous les lieux. Ils sont toutefois pas présentés comme tels dans le final de la présentation HTML. Seul le<br />
volonté.Donc, oui, vous devez les remplacer par
<br />
.Remarque: lors de l'utilisation d'Apache EL au lieu de l'Oracle EL, double-échapper à la barre oblique inverse comme dans
\\n
.Sinon vous ferez face à une exception avec le message
Failed to parse the expression with root cause org.apache.el.parser.ParseException: Encountered <ILLEGAL_CHARACTER>
.Tout cela est cependant laid et le
escape="false"
le rend sensible à la Les attaques XSS si la valeur vient de l'utilisateur final d'entrée et vous n'avez pas désinfecter à l'avance. Une meilleure alternative est de continuer à utiliser\n
et définir CSSwhite-space
de la propriété à préformaté sur l'élément parent. Si vous souhaitez envelopper les lignes à l'intérieur du contexte d'un élément de type block, puis définissezpre-wrap
. Ou si vous le souhaitez à l'effondrement d'espaces et de tabulations ainsi, puis définissezpre-line
.E. g.
<pre>
devrait également fonctionner. Cependant, le comportement par défaut de<pre>
balise peut être manipulé par les CSS. Donc si vous avez des 3e partie CSS qui vous n'avez pas lu ou n'a tout simplement pas comprendre, alors il pourrait avoir été la cause de la<pre>
n'est pas preformat plus.<pre>#{bean.text}</pre>
white-space: pre-wrap
a fonctionné pour moi. Lefn:replace
n'a pas.<br>
vous avez besoin le premier extrait de code et pour\n
vous avez besoin de la deuxième extrait de code.Ce comportement est normal, dans le HTML des espaces consécutifs tels que les espaces et les retours à la ligne (se normalise de sorte qu'il affiche juste comme un seul espace. Vous obtenez le même écran, si vous avez inclus le texte avec des retours à la ligne (directement dans la source HTML. À l'honneur mais les sauts de ligne à la sortie que vous auriez à faire passer le texte en
pre
de tags ou d'appliquer une feuille de style de la classe:Pour les autres valeurs possibles pour la
white-space
attribut oeil à cette page: http://www.w3schools.com/cssref/pr_text_white-space.aspLes réponses précédentes causé des problèmes pour moi de grandes quantités de texte, comme extrêmement large de sortie (pas de texte), qui
style="white-space: pre-wrap"
n'a pas résolu; ou c'est juste affiché le<br/>
en tant que texte, non pas comme une fin de ligne.À la fin, j'ai utilisé le
h:inputTextarea
composant pour afficher le texte et fait en "lecture seule" qui a fonctionné tout de suite sans avoir à remplacer les sauts de ligne, ni avoir recours à d'autres styles ou styleClasses. Et, il est redimensionnables pour répondre aux besoins de l'utilisateur, qui est un bonus.Pour de petites quantités de texte, j'ai trouvé le
pre-wrap
option, comme suggéré par henko ci-dessus, pour bien fonctionner.