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?


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;.


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


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.


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">

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.