Ich löste es auf andere Weise - wollte nicht warten, bis PrimeFaces das Interface implementiert. Ich zeige zwei "commandButton" s - nur einer von ihnen wird abhängig vom Status gerendert. Sie werden von einem Formular eingeschlossen - oder Sie können ein benanntes Panel verwenden ("selectProductUsageForm" in meinem Beispiel), das über AJAX aktualisiert wird. Der erste repräsentiert den aktiven (getoggten) Zustand - der zweite den nicht korrigierten Zustand.
Die Lösung bestand darin, das Darstellungsverhalten nachzuahmen - welches Primefaces in der CSS-Klasse "ui-state-active" (theme.css) kapselt. Ich habe den Inhalt der CSS-Klasse in meine eigene CSS-Klasse "man-ui-state-active" kopiert und der ersten Schaltfläche zugewiesen.
<h:form id="selectProductUsageForm"
rendered="#{productManager.mayEditSelected}">
<span class="productGroupUsageBtnContainer">
<p:commandButton
value="#{msg['product.inUseByGroup']} (#{login.currentUser.group.name})" styleClass="man-ui-state-active"
icon="ui-icon-check"
action="#{productManager.toggleCurrentProductGroupUsage}"
rendered="#{productManager.currentProductGroupUsage}" update="selectProductUsageForm">
<p:confirm message="Are you sure?"/>
</p:commandButton>
<p:commandButton value="#{msg['product.notInUseByGroup']} (#{login.currentUser.group.name})"
icon="ui-icon-close"
action="#{productManager.toggleCurrentProductGroupUsage}"
rendered="#{not productManager.currentProductGroupUsage}" update="selectProductUsageForm">
<p:confirm message="Are you sure?"/>
</p:commandButton>
</span>
</h:form>
CSS
.ui-button.man-ui-state-active {
background-color: #e6e6e6;
background-color: #d9d9d9 \9;
background-image: none;
outline: 0;
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
}
Nette Idee - aber es nicht funktioniert. :-( Die Komponente ist immer noch nicht quittierbar (PF 5.3) also ist das Tag nicht erlaubt .... was am meisten nervt ist, dass selbst "onclick" nicht gefeuert wird .... also alle meine Ideen um das manuell zu lösen sind verloren – cljk
ich bearbeitete die Antwort und testete es. Jetzt sollte es funktionieren. – LeonardoHAlmeida
Okay .... schön. So war der Trick, "onblur" oder "onchange" anstelle von "onclick" zu verwenden. Traurig, dass PF nicht erlaubt "onclick" oder implementieren "Confirmable". – cljk