<h:selectBooleanCheckbox id="deactivate" title="select to deactivate" />
I have a checkbox and a button on my JSF page. I want the button to be enabled only if checkbox is checked.
What is the JSF way of doing this with no manual javascript and no listener method on my java class. There should be way of doing it maybe with an expression something like;
"panel group rendered=#{}"
one button rendered for enabled and one button rendered or disabled.
You need to this by calling a valueChangeListener on ajax call so you can enable/disable button
Here is checkboxes and button
You need create a render class with just one attribute whose value will be set in listener method i-e
bean#myChangeListener
And here is your
bean#myChangeListener
This is plain impossible. I gather that you actually meant, "no manually written JavaScript" (and thus you accept JSF-generated JavaScript as used by
<f:ajax>
) and "no manually written listener method" (and thus you accept JSF own magic on the component tree state).In that case, this should do:
That's all. No additional JS code nor JSF bean properties or listener methods needed. Just a
submit()
action method.The
binding
attribute will in this example put theUIComponent
reference of<h:selectBooleanCheckbox>
in the Facelet scope under the variable namecheckbox
. The EL expression#{checkbox.value}
returns thevalue
attribute of the component which represents in case of anUISelectBoolean
component already aboolean
, ready for use in command component'sdisabled
attribute.Note: if you're facing an incorrect EL error at the line
disabled="#{not checkbox.value}"
in an older Eclipse version, then you'd need to configure it as follows: Window > Preferences > Web > JavaServer Faces Tools > Validation > Type Coercion Problems > Unary operation boolean coercion problems set it to Warning or Ignore instead of Error. This is not necessary anymore since Eclipse Mars.See also: