【问题标题】:JSF swallows closing tag after SVGJSF 在 SVG 之后吞下结束标签
【发布时间】:2013-07-26 07:38:25
【问题描述】:

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

<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 时吞下了第一个关闭的&lt;/li&gt;

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

我正在使用 Mojarra 2.1.7。

更新:正如@BalusC 所建议的,我将此报告给the Mojarra Guys

更新 2: 已使用 Mojarra 2.1.262.2.3 修复

【问题讨论】:

    标签: jsf svg xml-parsing


    【解决方案1】:

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

    无论如何,在 Facelets 中使用 SVG 的正确方法是将整个 &lt;svg&gt; 内容拆分为自己的 .svg 文件,并通过 &lt;ui:include&gt; 包含它。

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

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

    【讨论】:

    • 感谢一百万重新检查!我opened a ticket。还有一个关于通过&lt;ui:include&gt; 包含的svg 的问题:此文件必须以&lt;ui:composition&gt; 开头并且http://www.w3.org/2000/svg 是否应该是默认命名空间,或者您只是将svg“按原样”放在文件中?
    • 不,只是标准的 SVG 语法(没有 doctype)就可以了。
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2019-12-10
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多