错误解析/page.xhtml:错误跟踪[行:42]已引用实体“ nbsp”,但未声明


87

我想在我的JSF页面中使用不间断空格。我知道,在纯HTML中,我可以使用 它,并且效果很好。但是,当我将它们 放在Facelets页面中时,它将出现以下错误:

错误解析/page.xhtml:错误追踪[行:42]已引用实体“ nbsp”,但未声明。

这是怎么引起的,我该如何解决?


显示更多代码...您 确切地将idi放在哪里?
丹尼尔(Daniel)

Answers:


182

Facelets是一种基于XML的视图技术。XML只有五个预定义的实体。在 不在其中。它仅在纯HTML或旧版JSP中使用时才有效(注意:它在JSPX中不起作用,因为它也是基于XML的!)。

要解决此问题,您需要自己在包含 实体的XHTML文件的doctype中自己声明实体,

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

或者,最好改用(十六进制)十进制表示法:

&#xA0; or &#160;

在平均IDE它应该是微不足道的执行“查找,并在所有文件替换”和替换的每一个发生&nbsp;&#xA0;


3
使用十六进制或十进制表示法。:-)
纳宾


10
  1. <![CDATA[&nbsp;]]>应该工作正常。但是,这在属性值内部不起作用

  2. 另外,只要&amp;是XML中的预定义实体,您就可以尝试&amp;nbsp; -与我一起使用基于XML的JSP。这也应该在属性内起作用。


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;')” />的
事情

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 2.2版中运行
JGlass
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.