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

时间:2012-10-22 13:18:18

标签: jsf jsf-2 facelets html-entities

我想在我的JSF页面中使用非中断空格。我知道,在纯HTML中,我可以使用 来做这件事,这很好。但是,当我将这些 放在Facelets页面中时,它会出现如下错误:

  

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

这是如何引起的?如何解决?

5 个答案:

答案 0 :(得分:169)

Facelets是一种基于XML的视图技术。 XML只有five predefined entities 不在其中。它仅在纯HTML或旧JSP中使用时(注意:它在JSPX中不起作用,因为它也基于XML!)。

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

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

或者更好的是,改为使用(hexa)十进制表示法:

&#xA0; or &#160;

在普通的IDE中,执行“在所有文件中查找和替换”并将&nbsp;的每次出现替换为&#xA0;都应该是微不足道的。

答案 1 :(得分:10)

尝试使用&amp;#160;。有关实体的更多信息,请参阅以下网址HTML ISO-8859-1 Reference

答案 2 :(得分:10)

  1. <![CDATA[&nbsp;]]>应该可以正常使用。但是,不会在属性值内工作。

  2. 或者,只要&amp;是XML中的预定义实体,您就可以尝试&amp;nbsp; - 使用基于XML的JSP为我工作。这应该也适用于属性。

答案 3 :(得分:9)

对我来说,以下doctype启用&nbsp;

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

答案 4 :(得分:5)

添加

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

到文件顶部