javax.faces.view.facelets.FaceletException:错误解析/template.xhtml:引用了实体“nbsp”,但未声明

时间:2014-02-13 12:37:29

标签: jsf jsf-2 doctype html-entities

在我的Facelets模板中,我使用了XHTML doctype:

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

我想根据一般建议将其更改为HTML5 doctype

<!DOCTYPE html>

但是,JSF抛出了一个解析错误:

  

javax.faces.view.facelets.FaceletException:Error Parsing /template.xhtml:Error Traced [line:42]实体“nbsp”被引用,但未被声明。

然后解析HTML &nbsp;实体。该实体使用如下:

<p:menuitem value="&nbsp;My menuitem">

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

1 个答案:

答案 0 :(得分:7)

HTML5 doctype没有预定义的实体。它假定整个文档已经知道UTF-8。换句话说,您可以“安全地”在HTML5文档中放置真正的非破坏空格字符。然而,由于使用普通的美式键盘以可见的方式输入它并非易事,因此许多开发人员更喜欢使用实体来理解它是可以理解的。

Facelets反过来支持仅基于XML的视图技术five predefined XML entities &lt;&gt;&amp;&quot;&apos;&nbsp;不在其中。

你有2个选项(除了第3个选项,只是在文档中直接打印字符):

  1. 在doctype中自行声明&nbsp;实体:

    <!DOCTYPE html [
        <!ENTITY nbsp "&#xA0;"> 
    ]>
    
  2. 或者,改为使用(hexa)十进制表示法:

    &#xA0; or &#160;