我正在使用两个 <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正在吞噬第一次收盘
</li>
当它呈现 HTML 时。这是一个错误还是我的 xhtml 无效?
我正在使用 Mojarra 2.1.7。
更新:正如@BalusC 建议的那样,我将此报告给 the Mojarra Guys .
更新 2:用 Mojarra 修复 2.1.26和 2.2.3
最佳答案
我可以在 2.1.24 中重现它。我不确定这是否是 Facelets 的 SAX 解析器中的一个错误,但它确实看起来很像它在嵌套命名空间中被混淆了。你和 <svg xmlns>
声明一个新的默认 XML 命名空间,它似乎覆盖了 <html xmlns>
一种用于 HTML 标签。我推荐给 report这个问题给 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 可以通过这种方式立即重用。
关于JSF 在 SVG 之后吞下结束标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17875593/