Client Side APIを使えば動的にenable/disableを切り替えられる。
<p:commandButton action="#{...}" widgetVar="test"/>
<p:commandButton onclick="PF('test').enable();" value="enable"/>
<p:commandButton onclick="PF('test').disable();" value="disable"/>
しかし、困ったことにタグのdisabled属性でdisableにされていると、
APIでenableにしてもボタンが動作しなかったり入力値がPOSTされなかったりする。
<p:commandButton action="#{...}" widgetVar="test" disabled="#{hoge}"/> <!-- not work -->
<p:commandButton onclick="PF('test').enable();" value="enable"/>
<p:commandButton onclick="PF('test').disable();" value="disable"/>
初期表示時にdisableで、後からenableにしたい場合は初期表示時にAPIでdisableにする。
<p:commandButton action="#{...}" widgetVar="test"/> <!-- work -->
<p:commandButton onclick="PF('test').enable();" value="enable"/>
<p:commandButton onclick="PF('test').disable();" value="disable"/>
<script>
if(#{hoge}){
PF("test").disable();
}
</script>
PrimeFacesを使っているとJavascriptと相性悪いなーと思うことが多い。