私はこれを別の方法で解決しました.PlimeFacesがインターフェイスを実装するまで待つことはしませんでした。 私は2つの "commandButton"を表示しています - それらのうちの1つだけが状態に依存してレンダリングされます。それらはフォームで囲まれています。またはAJAXを介して更新された名前付きパネル(私の例では "selectProductUsageForm")を使用することができます。最初のものはアクティブな(トグルされた)状態を表しています。
解決策は、表示動作を模倣することでした。これは、PrimefacesがCSSクラスの「UI状態アクティブ」(theme.css)にカプセル化しています。 CSSクラスの内容を自分のCSSクラスの "man-ui-state-active"にコピーし、最初のボタンに割り当てました。
<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);
}
ナイスアイデア - しかし、それは動作しません。 :-( コンポーネントはまだ確認できません(PF 5.3)ので、タグは使用できません....最も厄介なことは、 "onclick"でも解雇されないということです。 – cljk
答えを編集してテストしましたが、これでうまくいくはずです – LeonardoHAlmeida
よかったです。だからトリックは "onclick"の代わりに "onblur"や "onchange"を使うことでした。 "onclick"または "Confirmable"を実装します。 – cljk