Error al analizar /page.xhtml: Error rastreada [línea: 42] Se hizo referencia a la entidad "nbsp", pero no se declaró

88

Me gustaría usar espacios que no se rompan en mi página JSF. Lo sé, en HTML simple que podría usar  para esto y esto funciona bien. Sin embargo, cuando los pongo  en una página de Facelets, se produce un error de la siguiente manera:

Error al analizar /page.xhtml: Error rastreada [línea: 42] Se hizo referencia a la entidad "nbsp", pero no se declaró.

¿Cómo se produce esto y cómo puedo solucionarlo?

Fahim Parkar
fuente
mostrar algo más de código ... ¿dónde idiotas lo colocaste  exactamente?
Daniel

Respuestas:

184

Facelets es una tecnología de visualización basada en XML. XML tiene solo cinco entidades predefinidas . El  no está entre ellos. Solo funciona cuando se usa en HTML simple o en JSP heredado (nota: no funciona en JSPX ya que también está basado en XML).

Para solucionar esto, debe declarar la entidad usted mismo en el tipo de documento del mismo archivo XHTML que contiene la  entidad,

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

o, mejor, use la notación decimal (hexa) en su lugar:

&#xA0; or &#160;

En un IDE promedio, debería ser trivial realizar un "buscar y reemplazar en todos los archivos" y reemplazar cada aparición de &nbsp;por &#xA0;.

BalusC
fuente
3
Utilice la notación hexadecimal o decimal. :-)
Nabin
10
  1. <![CDATA[&nbsp;]]>debería funcionar bien. Sin embargo, esto no funciona dentro del valor del atributo.

  2. Alternativamente, siempre que &amp;sea ​​una entidad predefinida en XML, podría intentarlo &amp;nbsp; , funcionó para mí con JSP basado en XML. Esto también debería funcionar dentro de los atributos.

Pedro y el lobo
fuente
9

Para mí, el siguiente doctype habilita &nbsp;:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Oleg Khaschansky
fuente
Con esto pude hacer algo como <xsl: variable name = "size" select = "substring-before (s: td [3], '& nbsp;')" />
slott
5

añadir

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

al principio del archivo

Игорь Долгополов
fuente
4
¿Por qué esto obtuvo dos negativos? Me pregunto. Tal vez sea un poco demasiado conciso, pero es correcto. La entidad no se definió en el tipo de documento y se define cuando se utiliza la especificación proporcionada. Un año después, alguien publica exactamente lo mismo y obtiene dos votos a favor.
Dilapidus
Estoy de acuerdo con @Dilapidus, esto funcionó perfecto para mí en Chrome y JBoss EAP 7 y Facelets Versión 2.2
JGlass