Error Parsing /page.xhtml: Error Traced [wiersz: 42] Odwołano się do elementu „nbsp”, ale nie został on zadeklarowany

88

Chciałbym używać nierozdzielających spacji na mojej stronie JSF. Wiem, w zwykłym HTML mógłbym użyć  do tego i to działa dobrze. Jednak kiedy umieszczam je  na stronie Facelets, wyświetla się następujący błąd:

Analiza błędów /page.xhtml: Error Traced [wiersz: 42] Odwołano się do encji „nbsp”, ale nie została ona zadeklarowana.

Jak to się dzieje i jak mogę to rozwiązać?

Fahim Parkar
źródło
pokaż trochę więcej kodu ... gdzie idi  dokładnie to umieściłeś ?
Daniel

Odpowiedzi:

184

Facelets to technologia widoku oparta na języku XML. XML ma tylko pięć predefiniowanych jednostek . Nie  ma wśród nich. Działa tylko wtedy, gdy jest używany w zwykłym HTML lub w starszej wersji JSP (uwaga: nie działa w JSPX, ponieważ jest również oparty na XML!).

Aby to naprawić, musisz sam zadeklarować jednostkę w typie dokumentu samego pliku XHTML zawierającego  jednostkę,

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

lub lepiej, zamiast tego użyj notacji dziesiętnej (szesnastkowej):

&#xA0; or &#160;

W przeciętnym IDE powinno być trywialne wykonanie operacji „znajdź i zamień we wszystkich plikach” i zastąpienie każdego wystąpienia &nbsp;przez &#xA0;.

BalusC
źródło
3
Użyj notacji szesnastkowej lub dziesiętnej. :-)
Nabin
11

Spróbuj użyć &amp;#160;. Aby uzyskać więcej informacji na temat jednostek, możesz skorzystać z adresu URL HTML ISO-8859-1 Reference

Sanjeevi.V
źródło
10
  1. <![CDATA[&nbsp;]]>powinno działać dobrze. Nie działa to jednak wewnątrz wartości atrybutu.

  2. Alternatywnie, o ile &amp;jest to predefiniowana jednostka w XML, możesz spróbować &amp;nbsp; - pracowałem dla mnie z JSP opartym na XML. Powinno to działać również w przypadku atrybutów.

Piotr i Wilk
źródło
9

Dla mnie następujący typ dokumentu umożliwia &nbsp;:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Oleg Khaschansky
źródło
Dzięki temu mogłem zrobić coś takiego jak <xsl: nazwa zmiennej = "rozmiar" select = "substring-before (s: td [3], '& nbsp;')" />
slott
5

Dodaj

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

na początek pliku

Игорь Долгополов
źródło
4
Zastanawiam się, dlaczego to dało dwa negatywy. Może jest trochę za zwięzłe, ale jest poprawne. Jednostka nie została zdefiniowana w doctype i jest definiowana przy użyciu podanej specyfikacji. Rok później ktoś publikuje dokładnie to samo i dostaje dwa głosy za.
Dilapidus
Zgadzam się z @Dilapidus, to działało idealnie dla mnie w Chrome i JBoss EAP 7 i Facelets w wersji 2.2
JGlass