Fehleranalyse /page.xhtml: Fehler verfolgt [Zeile: 42] Die Entität "nbsp" wurde referenziert, aber nicht deklariert

87

Ich möchte auf meiner JSF-Seite nicht unterbrechende Leerzeichen verwenden. Ich weiß, in einfachem HTML könnte ich das verwenden  und das funktioniert gut. Wenn ich diese jedoch  in eine Facelets-Seite einfüge, tritt folgender Fehler auf:

Fehleranalyse /page.xhtml: Fehler verfolgt [Zeile: 42] Die Entität "nbsp" wurde referenziert, aber nicht deklariert.

Wie wird das verursacht und wie kann ich es lösen?

Fahim Parkar
quelle
zeige noch etwas Code ... wo hast du das  genau platziert ?
Daniel

Antworten:

182

Facelets ist eine XML-basierte Ansichtstechnologie. XML hat nur fünf vordefinierte Entitäten . Das  ist nicht unter ihnen. Es funktioniert nur, wenn es in einfachem HTML oder in Legacy-JSP verwendet wird (Hinweis: Es funktioniert nicht in JSPX, da dies auch XML-basiert ist!).

Um dies zu beheben, müssen Sie die Entität entweder selbst im Doctype der XHTML-Datei deklarieren, die die  Entität enthält.

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

Oder verwenden Sie stattdessen die (hexa) Dezimalschreibweise:

&#xA0; or &#160;

In einer durchschnittlichen IDE sollte es trivial sein, ein "Suchen und Ersetzen in allen Dateien" durchzuführen und jedes Auftreten von &nbsp;durch zu ersetzen &#xA0;.

BalusC
quelle
3
Verwenden Sie die Hexadezimal- oder Dezimalschreibweise. :-)
Nabin
11

Versuchen Sie es mit &amp;#160;. Weitere Informationen zu Entitäten finden Sie in der folgenden URL HTML ISO-8859-1 Referenz

Sanjeevi.V
quelle
10
  1. <![CDATA[&nbsp;]]>sollte gut funktionieren. Dies funktioniert jedoch nicht innerhalb des Attributwerts.

  2. Alternativ können &amp;Sie versuchen &amp;nbsp; , mit XML-basierter JSP für mich zu arbeiten , solange es sich um eine vordefinierte Entität in XML handelt . Dies sollte auch innerhalb von Attributen funktionieren.

Peter und der Wolf
quelle
9

Für mich ermöglicht der folgende Doctype &nbsp;:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Oleg Khaschansky
quelle
Damit konnte ich so etwas wie <xsl: variable name = "size" select = "substring-before (s: td [3], '& nbsp;')" />
Slott
5

hinzufügen

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

an den Anfang der Datei

Игорь Долгополов
quelle
4
Warum hat das zwei Negative bekommen, frage ich mich. Es ist vielleicht etwas zu prägnant, aber es ist richtig. Die Entität wurde im Doctype nicht definiert und wird bei Verwendung der angegebenen Spezifikation definiert. Ein Jahr später veröffentlicht jemand genau das Gleiche und erhält zwei positive Stimmen.
Dilapidus
Ich stimme @Dilapidus zu, dies funktionierte perfekt für mich in Chrome und JBoss EAP 7 und Facelets Version 2.2
JGlass