我在<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.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可以立即重复使用。