Análise de erro /page.xhtml: Erro rastreado [linha: 42] A entidade “nbsp” foi referenciada, mas não declarada

87

Eu gostaria de usar espaços não separáveis ​​na minha página JSF. Eu sei, em HTML simples eu poderia usar  para isso e funciona bem. No entanto, quando os coloco  em uma página Facelets, ocorre o seguinte erro:

Análise de erro /page.xhtml: Erro rastreado [linha: 42] A entidade "nbsp" foi referenciada, mas não declarada.

Como isso é causado e como posso resolver isso?

Fahim Parkar
fonte
mostre mais um código ... onde idi você colocou  exatamente?
Daniel,

Respostas:

182

Facelets é uma tecnologia de visualização baseada em XML. XML tem apenas cinco entidades predefinidas . O  não está entre eles. Funciona apenas quando usado em HTML simples ou em JSP legado (nota: não funciona em JSPX, pois também é baseado em XML!).

Para corrigir isso, você mesmo precisa declarar a entidade no doctype do próprio arquivo XHTML que contém a  entidade,

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

ou, melhor, use a notação decimal (hexa) em vez disso:

&#xA0; or &#160;

Em um IDE comum, deve ser trivial executar um "localizar e substituir em todos os arquivos" e substituir todas as ocorrências de &nbsp;por &#xA0;.

BalusC
fonte
3
Use a notação hexadecimal ou decimal. :-)
Nabin de
11

Tente usar &amp;#160;. para obter mais informações sobre entidades, você pode consultar a seguir url HTML ISO-8859-1 Reference

Sanjeevi.V
fonte
10
  1. <![CDATA[&nbsp;]]>deve funcionar bem. Este não trabalho dentro de valor do atributo, no entanto.

  2. Como alternativa, desde que &amp;seja uma entidade predefinida em XML, você poderia tentar &amp;nbsp; - funcionou para mim com JSP baseado em XML. Isso deve funcionar com os atributos também.

Pedro e o Lobo
fonte
9

Para mim, o seguinte doctype ativa &nbsp;:

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

adicionar

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

para o topo do arquivo

Игорь Долгополов
fonte
4
Por que isso obteve dois negativos, eu me pergunto. Talvez seja um pouco conciso, mas está correto. A entidade não foi definida no doctype e é definida ao usar a especificação fornecida. Um ano depois, alguém posta exatamente a mesma coisa e obtém dois votos positivos.
Dilapidus
Concordo com @Dilapidus, isso funcionou perfeitamente para mim no Chrome e JBoss EAP 7 e Facelets Versão 2.2
JGlass