Ошибка синтаксического анализа /page.xhtml: обнаружена ошибка [строка: 42] На объект «nbsp» была сделана ссылка, но он не объявлен

88

Я хотел бы использовать неразрывные пробелы на моей странице JSF. Я знаю, что в обычном HTML я мог бы использовать  для этого, и это отлично работает. Однако, когда я помещаю их  на страницу Facelets, появляется следующая ошибка:

Ошибка синтаксического анализа /page.xhtml: обнаружена ошибка [строка: 42] Сущность «nbsp» была указана, но не объявлена.

Как это вызвано и как я могу решить эту проблему?

Фахим Паркар
источник
покажите еще код ... где, иди, вы его разместили  ?
Даниэль

Ответы:

184

Facelets - это технология просмотра на основе XML. XML имеет только пять предопределенных сущностей .  Среди них нет . Он работает только при использовании в обычном HTML или в устаревшем JSP (примечание: он не работает в JSPX, поскольку он также основан на XML!).

Чтобы исправить это, вам нужно либо самостоятельно объявить объект в doctype того самого файла XHTML, который содержит  объект, либо

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

или, лучше, используйте вместо этого (шестнадцатеричную) десятичную запись:

&#xA0; or &#160;

В среднестатистической среде IDE должно быть тривиально выполнять «поиск и замену во всех файлах» и заменять каждое вхождение &nbsp;на &#xA0;.

BalusC
источник
3
Используйте шестнадцатеричное или десятичное представление. :-)
Набин
11

Попробуйте использовать &amp;#160;. для получения дополнительной информации об объектах вы можете обратиться по следующему URL-адресу HTML ISO-8859-1 Ссылка

Сандживи В.
источник
10
  1. <![CDATA[&nbsp;]]>должно работать нормально. Однако это не работает внутри значения атрибута.

  2. В качестве альтернативы, если &amp;это предопределенная сущность в XML, вы можете попробовать &amp;nbsp; - у меня работал с JSP на основе XML. Это также должно работать с атрибутами.

Петя и волк
источник
9

Для меня следующий doctype позволяет &nbsp;:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Олег Хащанский
источник
С этим я смог сделать что-то вроде <xsl: variable name = "size" select = "substring-before (s: td [3], '& nbsp;')" />
slott
5

Добавить

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

в начало файла

Игорь Долгополов
источник
4
Интересно, почему у этого есть два негатива. Возможно, это слишком кратко, но это правильно. Сущность не была определена в doctype, и она определяется при использовании предоставленной спецификации. Год спустя кто-то публикует то же самое и получает два голоса за.
Dilapidus
Я согласен с @Dilapidus, это отлично сработало для меня в Chrome и JBoss EAP 7 и Facelets Version 2.2
JGlass