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

问题描述 投票:3回答:1

我在<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时,JSF正在吞下第一个关闭的</li>

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

我正在使用Mojarra 2.1.7。

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

更新2:使用Mojarra 2.1.262.2.3修复

jsf svg xml-parsing
1个回答
5
投票

我可以在2.1.24中重现它。我不确定这是Facelets的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可以立即重复使用。

© www.soinside.com 2019 - 2024. All rights reserved.