我希望有可以通过单击标题来选择切换的面板,并且还希望在面板的左侧有图标。我选择创建一个自定义标签来做到这一点。
my.taglib.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
<namespace>http://my.com/jsf/facelets</namespace>
<tag>
<tag-name>togglePanel</tag-name>
<source>tags/togglePanel.xhtml</source>
<attribute>
<name>header</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
<attribute>
<name>collapsed</name>
<required>false</required>
<type>boolean</type>
</attribute>
</tag>
</facelet-taglib>
togglePanel.xhtml
:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<c:set var="collapsed" value="#{not empty collapsed and collapsed}" />
<p:panel toggleable="true" collapsed="#{collapsed}" class="myToggleable">
<f:facet name="header">
<a href="#" onclick="document.getElementById(this.parentNode.parentNode.id.replace('_header', '_toggler')).click()"><h:outputText
value="#{header}"/></a>
</f:facet>
<ui:insert />
</p:panel>
</ui:composition>
样式表:
.ui-panel.myToggleable .ui-panel-titlebar {
position: relative; padding: .5em 1em .3em 2.5em;
}
.ui-panel.myToggleable .ui-panel-title,
.ui-panel.myToggleable .ui-panel-title a {
display: block; text-decoration: none;
}
.ui-panel.myToggleable .ui-panel-titlebar-icon,
.ui-panel.myToggleable .ui-panel-titlebar-icon:hover {
position: absolute; left: 10px; top: 10px; margin: 0;
}
现在您可以在 XHTML 文件中像这样使用它:
<my:togglePanel header="Header" collapsed="false">
...
</my:togglePanel>
不过,您应该添加以下命名空间:xmlns:my="http://my.com/jsf/facelets"
.
这已经使用 PrimeFaces 6.0 进行了测试。