在上一篇文章中,我们讨论了Mojarra 2.0.0 PR中令人烦恼的问题,即空属性被渲染到最终的HTML代码中。这个问题被发布到Mojarra项目: https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=940
现在,它已经修复了。让我们看看Mojarra 2.0.0的新版本。这不是PR版本,而是2008年1月27日的SNAPSHOT。
SNAPSHOT有两个惊喜。
首先,我们可以使用c:if来进行条件插入。我们在第2部分讨论了这个问题。
其次,已经没有了composite:insertChildren标签。这个标签被替换为composite:renderUsingPageChildren。它在语义上更正确,但需要一些时间来记忆。
好的,这是组件的工作代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:composite="http://java.sun.com/jsf/composite"> <head> <title>panel</title> </head> <body> <composite:interface> <composite:attribute name="style" required="false"/> <composite:attribute name="styleClass" required="false"/> <composite:attribute name="headerClass" required="false"/> <composite:attribute name="bodyClass" required="true"/> </composite:interface> <composite:implementation> <h:outputStylesheet name="rich/css/panel.css" /> <div class="rich-panel #{compositeComponent.attrs.styleClass}" style="#{compositeComponent.attrs.style}" onclick="#{compositeComponent.attrs.onclick}" ondblclick="#{compositeComponent.attrs.ondblclick}" onkeydown="#{compositeComponent.attrs.onkeydown}" onkeypress="#{compositeComponent.attrs.onkeypress}" onkeyup="#{compositeComponent.attrs.onkeyup}" onmousedown="#{compositeComponent.attrs.onmousedown}" onmousemove="#{compositeComponent.attrs.onmousemove}" onmouseout="#{compositeComponent.attrs.onmouseout}" onmouseover="#{compositeComponent.attrs.onmouseover}" onmouseup="#{compositeComponent.attrs.onmouseup}"> <c:if test="#{! empty compositeComponent.facets.header}"> <div class="rich-panel-header #{compositeComponent.attrs.headerClass}"> <composite:insertFacet name="header"/> </div> </c:if> <div class="rich-panel-body #{compositeComponent.attrs.bodyClass}" > <composite:renderUsingPageChildren /> </div> </div> </composite:implementation> </body> </html>
这是一个部署的示例: http://livedemo.exadel.com/richfaces4-panel-4a/home.jsf
如果您查看结果HTML代码,您会看到不再插入空属性。