在SVG之后,JSF吞下了关闭标签

时间:2013-07-26 07:38:26

标签: jsf svg xml-parsing

我在<svg>内使用了两个<ul>元素。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"      
    xmlns:h="http://java.sun.com/jsf/html">

...
<ul>
    <li>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" >...</svg>
    </li>
    <li>
        <svg xmlns="http://www.w3.org/2000/svg" version="1.1" >...</svg>
    </li>
</ul>
...
</html>

JSF在呈现HTML时吞下了第一个结束</li>

这是一个错误还是我的xhtml无效?

我正在使用Mojarra 2.1.7。

更新:正如@BalusC建议我向the Mojarra Guys报告此内容。

更新2:已修复Mojarra 2.1.262.2.3

1 个答案:

答案 0 :(得分:4)

我可以在2.1.24中重现它。我不确定这是Facelets&#39;中的错误。 SAX解析器,但它确实看起来很像它在嵌套命名空间中混淆。您在<svg xmlns>声明了一个新的默认XML命名空间,该命名空间似乎覆盖了HTML标记的<html xmlns>。我向Mojarra家伙推荐report这个问题。

在任何情况下,在Facelets中使用SVG的正确方法是将整个<svg>内容拆分为自己的.svg文件,并通过<ui:include>将其包含在内。

<ul>
    <li>
        <ui:include src="/resources/svg/one.svg" />
    </li>
    <li>
        <ui:include src="/resources/svg/two.svg" />
    </li>
</ul>

这样命名空间工作正常。额外的好处是,您的SVG可以立即重复使用。