Les widgets GWT Label iterprets tout sous forme de texte et non sous forme de balises html - c'est bien, mais j'aimerais interpréter \n
comme un <br />
comment procéder.
Je voudrais faire la sous-classe, mais je ne peux pas trouver quoi substituer pour obtenir ce comportement
(Je pourrais utiliser un widget HTML, mais cela interpréterait toutes les balises - et tout ce dont j'ai besoin, c'est une ligne brak)
Utilisez un widget HTML et définissez sa valeur à l'aide d'une variable SafeHtml
construite avec SafeHtmlBuilder.appendEscapedLines
:
HTML label = new HTML(new SafeHtmlBuilder().appendEscapedLines("foo<bar\nbaz>quux").toSafeHtml());
(alternativement, vous pouvez split("\n", -1)
votre texte, appelez SafeHtml.htmlEscape
sur chaque partie et reliez-les avec un <br>
, c'est ce que fait appendEscapedLines
)
Une autre option consiste à utiliser CSS, ce qui peut suffire dans certains cas où ce problème se pose.
Ajoutez l’attribut CSS white-space: pre
ou pre-wrap
dans la zone où vous affichez le texte. Cela garantira que les sauts de ligne sont respectés lors du rendu du document.
Cette approche peut potentiellement réduire une partie de la complexité, par exemple le traitement de l'entrée où \n
est remplacé par <br/>
.
Vous pouvez utiliser com.google.gwt.user.client.ui.HTML
class pour y parvenir ou simplement écrire,
Label label = new HTML("// html code you wnat to write");
Le problème pour afficher du texte multiligne avec HTML dans des fichiers XML est que nous ne sommes pas autorisés à utiliser le caractère <dans le contenu. Par exemple, le code ci-dessous ne peut pas être compilé:
<g:HTML HTML="Line 1<br />Line2<br />Line 3" />
Dans mon cas, je déclare ce texte en tant que chaîne i18n, puis je l’utilise en HTML.
<ui:with field='ln' type='com.mycompany.i18n.LocalizableStrings'/>
<g:HTML HTML="{ln.EXPLAINATION}" />