membersound
membersound

Reputation: 86627

Action of JSF h:commandButton not invoked after setting disabled=true in JavaScript

Who can explain the following behaviour? When disabling a command button in JavaScript, the action method is never executed.

<h:form>
    <h:commandButton value="test" action="#{bean.test}" onclick="disabled=true" />
</h:form>

Upvotes: 1

Views: 749

Answers (2)

BalusC
BalusC

Reputation: 1108537

When a HTML form element is disabled, then its name=value pair won't be sent as HTTP request parameter and hence JSF will never find it in the request parameter map. For command buttons this in turn means that the action is never invoked.

You need to disable the button shortly after the form has been submitted. The proposed suggestions to use disabled attribute make no sense as it's too late. It's not set during submitting the form, but it's only set when the response returns.

To achieve your particular functional requirement in this particular case, you could use JS to timeout the disablement.

<h:commandButton ... onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" />

Much better is however to use <f:ajax onevent>

See also:

Upvotes: 2

Javi Pedrera
Javi Pedrera

Reputation: 2095

Try to disable the button from the BackBean using the property "disabled" of the component

disabled="#{!(bean.disable)}"

This option will work when the component is rendered, after the information sent

Upvotes: -1

Related Questions