6

我在<svg>a 中使用了两个元素<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 在</li>呈现 HTML 时吞下了第一次关闭。

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

我正在使用 Mojarra 2.1.7。

更新:正如@BalusC 建议的那样,我向Mojarra Guys报告了这一点。

更新 2:在 Mojarra 2.1.262.2.3中修复

4

1 回答 1

7

我可以在 2.1.24 中重现它。我不确定这是否是 Facelets 的 SAX 解析器中的错误,但它确实看起来很像它在嵌套命名空间中混淆了。您正在<svg xmlns>声明一个新的默认 XML 命名空间,该命名空间似乎覆盖了<html xmlns>HTML 标记的命名空间。我建议将此问题报告给 Mojarra 家伙。

无论如何,在 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 可以通过这种方式立即重复使用。

于 2013-07-26T11:53:24.170 回答