Erreur d'analyse /page.xhtml: Erreur tracée [ligne: 42] L'entité «nbsp» a été référencée, mais n'a pas été déclarée

87

Je voudrais utiliser des espaces insécables dans ma page JSF. Je sais, en HTML simple, je pourrais utiliser  pour cela et cela fonctionne très bien. Cependant, quand je mets ces  dans une page Facelets, les erreurs suivantes sont commises:

Erreur d'analyse /page.xhtml: Erreur tracée [ligne: 42] L'entité "nbsp" a été référencée, mais pas déclarée.

Comment cela est-il causé et comment puis-je le résoudre?

Fahim Parkar
la source
montrer un peu plus de code ... où idi vous avez placé cela  exactement?
Daniel

Réponses:

182

Facelets est une technologie de visualisation basée sur XML. XML n'a que cinq entités prédéfinies . Le  n'est pas parmi eux. Cela ne fonctionne que lorsqu'il est utilisé en HTML brut ou dans l'ancien JSP (note: cela ne fonctionne pas dans JSPX car il est également basé sur XML!).

Pour résoudre ce problème, vous devez soit déclarer vous-même l'entité dans le doctype du fichier XHTML même contenant l'  entité,

<!DOCTYPE html [
    <!ENTITY nbsp "&#160;"> 
]>

ou, mieux, utilisez la notation décimale (hexa) à la place:

&#xA0; or &#160;

Dans un IDE moyen, il devrait être simple d'effectuer une recherche et de remplacer dans tous les fichiers et de remplacer chaque occurrence de &nbsp;par &#xA0;.

BalusC
la source
3
Utilisez la notation hexadécimale ou décimale. :-)
Nabin
11

Essayez d'utiliser &amp;#160;. pour plus d'informations sur les entités, vous pouvez vous référer à l'url HTML ISO-8859-1 Reference

Sanjeevi.V
la source
10
  1. <![CDATA[&nbsp;]]>devrait bien fonctionner. Cela ne fonctionne pas à l' intérieur de la valeur d'attribut, cependant.

  2. Sinon, tant qu'il &amp;s'agit d'une entité prédéfinie en XML, vous pouvez essayer &amp;nbsp; - travaillé pour moi avec JSP basé sur XML. Cela devrait également fonctionner avec les attributs.

Pierre et le loup
la source
9

Pour moi, le doctype suivant permet &nbsp;:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Oleg Khaschansky
la source
Avec cela, j'ai pu faire quelque chose comme <xsl: variable name = "size" select = "substring-before (s: td [3], '& nbsp;')" />
slott
5

ajouter

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

en haut du fichier

Игорь Долгополов
la source
4
Pourquoi cela a-t-il eu deux points négatifs, je me demande. C'est peut-être un peu trop concis mais c'est correct. L'entité n'a pas été définie dans le doctype et elle est définie lors de l'utilisation de la spécification fournie. Un an plus tard, quelqu'un publie exactement la même chose et obtient deux votes positifs.
Dilapidus
Je suis d'accord avec @Dilapidus, cela a fonctionné parfaitement pour moi dans Chrome et JBoss EAP 7 et Facelets Version 2.2
JGlass