You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Rick Gruber-Riemer <ri...@vanosten.net> on 2009/05/31 08:40:03 UTC

Disabling component again with AjaxCheckBox

Hi

I have a checkbox which must be checked for the user to be able to submit
(accept terms). I want the related submit button to be enabled only, when
the checkbox is checked. This works fine when the button initially is
disabled, then the checkbox is checked by the user (I followed
http://www.nabble.com/Disabling-and-enabling-components-using-AjaxCheckBox-td20911338.html#a20911338).
However, when the user then unchecks the checkbox again, the button does not
get disabled again :-(

Any suggestions?

    <div wicket:id="feedback"></div>
    <form wicket:id="form">
        <span wicket:id="border"><input type="checkbox" wicket:id="acceptCB"
id="acceptCB" /></span>
        <label for="acceptCB"><wicket:message key="acceptCB">[Accept
delete]</wicket:message></label>
        <br/>
        <input type="submit" value="[Confirm]" id="confirmBtn"
wicket:id="confirmBtn" wicket:message="value:confirmBtn"/>
    </form>

==========

    /** Whether or not the conditions for deletion are accepted. Acts as
IModel for the checkbox */
    private boolean accepted = false;

    /** The confirm button */
    Button confirmBTN = null;

    /** The accept check box */
    CheckBox acceptCB = null;

    public AccountDeletePage() {
        add(new FeedbackPanel("feedback"));
        Form form = new Form("form");
        add(form);
        confirmBTN = new Button("confirmBtn") {
            @Override
            public void onSubmit() {
                doDelete();
            }
        };
        confirmBTN.setEnabled(false);
        confirmBTN.setOutputMarkupId(true); //not sure why this is needed
        form.add(confirmBTN);
        //CheckBox acceptCB = new CheckBox("acceptCB", new
PropertyModel(this, "accepted"));
        acceptCB = new AjaxCheckBox("acceptCB",new PropertyModel(this,
"accepted")) {
            @Override protected void onUpdate(AjaxRequestTarget arg0) {
                doUpdateConfirmButton();
                if(arg0 != null) {
                    arg0.addComponent(confirmBTN);
                }
            }
        };
        acceptCB.setRequired(true);
        form.add(new FormComponentFeedbackBorder("border").add(acceptCB));
    }

    /**
     * Updates the enabled state of the delete button depending on
acceptance
     */
    private final void doUpdateConfirmButton() {
        boolean enabled = acceptCB.isEnabled();
        confirmBTN.setEnabled(enabled);
    }

Re: Disabling component again with AjaxCheckBox

Posted by Igor Vaynberg <ig...@gmail.com>.
is your checkbox required? any validation errors? see if onerror() is
called instead of onupdate()

-igor

On Sun, May 31, 2009 at 11:04 AM, Rick Gruber-Riemer <ri...@vanosten.net> wrote:
> Hi
>
> Thank you for your answer.
>
> Unfortunately this did not solve the problem. In the meantime I found out,
> that the onUpdate method is only called when the checkbox is checked, but
> not when the checkbox is removed (i.e. check, uncheck, check, uncheck
> results in two invocations of onUpdate). This does not sound correct to me,
> but I am not sure.
>
> 2009/5/31 Steve Swinsburg <s....@lancaster.ac.uk>
>
>> Call doUpdateConfirmButton() when the page first loads so you can set it up
>> initially, then again when the checkbox is clicked as you already do.
>>
>>
>> cheers,
>> Steve
>>
>>
>>
>> On 31/05/2009, at 7:40 AM, Rick Gruber-Riemer wrote:
>>
>>  Hi
>>>
>>> I have a checkbox which must be checked for the user to be able to submit
>>> (accept terms). I want the related submit button to be enabled only, when
>>> the checkbox is checked. This works fine when the button initially is
>>> disabled, then the checkbox is checked by the user (I followed
>>>
>>> http://www.nabble.com/Disabling-and-enabling-components-using-AjaxCheckBox-td20911338.html#a20911338
>>> ).
>>> However, when the user then unchecks the checkbox again, the button does
>>> not
>>> get disabled again :-(
>>>
>>> Any suggestions?
>>>
>>>   <div wicket:id="feedback"></div>
>>>   <form wicket:id="form">
>>>       <span wicket:id="border"><input type="checkbox" wicket:id="acceptCB"
>>> id="acceptCB" /></span>
>>>       <label for="acceptCB"><wicket:message key="acceptCB">[Accept
>>> delete]</wicket:message></label>
>>>       <br/>
>>>       <input type="submit" value="[Confirm]" id="confirmBtn"
>>> wicket:id="confirmBtn" wicket:message="value:confirmBtn"/>
>>>   </form>
>>>
>>> ==========
>>>
>>>   /** Whether or not the conditions for deletion are accepted. Acts as
>>> IModel for the checkbox */
>>>   private boolean accepted = false;
>>>
>>>   /** The confirm button */
>>>   Button confirmBTN = null;
>>>
>>>   /** The accept check box */
>>>   CheckBox acceptCB = null;
>>>
>>>   public AccountDeletePage() {
>>>       add(new FeedbackPanel("feedback"));
>>>       Form form = new Form("form");
>>>       add(form);
>>>       confirmBTN = new Button("confirmBtn") {
>>>           @Override
>>>           public void onSubmit() {
>>>               doDelete();
>>>           }
>>>       };
>>>       confirmBTN.setEnabled(false);
>>>       confirmBTN.setOutputMarkupId(true); //not sure why this is needed
>>>       form.add(confirmBTN);
>>>       //CheckBox acceptCB = new CheckBox("acceptCB", new
>>> PropertyModel(this, "accepted"));
>>>       acceptCB = new AjaxCheckBox("acceptCB",new PropertyModel(this,
>>> "accepted")) {
>>>           @Override protected void onUpdate(AjaxRequestTarget arg0) {
>>>               doUpdateConfirmButton();
>>>               if(arg0 != null) {
>>>                   arg0.addComponent(confirmBTN);
>>>               }
>>>           }
>>>       };
>>>       acceptCB.setRequired(true);
>>>       form.add(new FormComponentFeedbackBorder("border").add(acceptCB));
>>>   }
>>>
>>>   /**
>>>    * Updates the enabled state of the delete button depending on
>>> acceptance
>>>    */
>>>   private final void doUpdateConfirmButton() {
>>>       boolean enabled = acceptCB.isEnabled();
>>>       confirmBTN.setEnabled(enabled);
>>>   }
>>>
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Disabling component again with AjaxCheckBox

Posted by Rick Gruber-Riemer <ri...@vanosten.net>.
Hi

Thank you for your answer.

Unfortunately this did not solve the problem. In the meantime I found out,
that the onUpdate method is only called when the checkbox is checked, but
not when the checkbox is removed (i.e. check, uncheck, check, uncheck
results in two invocations of onUpdate). This does not sound correct to me,
but I am not sure.

2009/5/31 Steve Swinsburg <s....@lancaster.ac.uk>

> Call doUpdateConfirmButton() when the page first loads so you can set it up
> initially, then again when the checkbox is clicked as you already do.
>
>
> cheers,
> Steve
>
>
>
> On 31/05/2009, at 7:40 AM, Rick Gruber-Riemer wrote:
>
>  Hi
>>
>> I have a checkbox which must be checked for the user to be able to submit
>> (accept terms). I want the related submit button to be enabled only, when
>> the checkbox is checked. This works fine when the button initially is
>> disabled, then the checkbox is checked by the user (I followed
>>
>> http://www.nabble.com/Disabling-and-enabling-components-using-AjaxCheckBox-td20911338.html#a20911338
>> ).
>> However, when the user then unchecks the checkbox again, the button does
>> not
>> get disabled again :-(
>>
>> Any suggestions?
>>
>>   <div wicket:id="feedback"></div>
>>   <form wicket:id="form">
>>       <span wicket:id="border"><input type="checkbox" wicket:id="acceptCB"
>> id="acceptCB" /></span>
>>       <label for="acceptCB"><wicket:message key="acceptCB">[Accept
>> delete]</wicket:message></label>
>>       <br/>
>>       <input type="submit" value="[Confirm]" id="confirmBtn"
>> wicket:id="confirmBtn" wicket:message="value:confirmBtn"/>
>>   </form>
>>
>> ==========
>>
>>   /** Whether or not the conditions for deletion are accepted. Acts as
>> IModel for the checkbox */
>>   private boolean accepted = false;
>>
>>   /** The confirm button */
>>   Button confirmBTN = null;
>>
>>   /** The accept check box */
>>   CheckBox acceptCB = null;
>>
>>   public AccountDeletePage() {
>>       add(new FeedbackPanel("feedback"));
>>       Form form = new Form("form");
>>       add(form);
>>       confirmBTN = new Button("confirmBtn") {
>>           @Override
>>           public void onSubmit() {
>>               doDelete();
>>           }
>>       };
>>       confirmBTN.setEnabled(false);
>>       confirmBTN.setOutputMarkupId(true); //not sure why this is needed
>>       form.add(confirmBTN);
>>       //CheckBox acceptCB = new CheckBox("acceptCB", new
>> PropertyModel(this, "accepted"));
>>       acceptCB = new AjaxCheckBox("acceptCB",new PropertyModel(this,
>> "accepted")) {
>>           @Override protected void onUpdate(AjaxRequestTarget arg0) {
>>               doUpdateConfirmButton();
>>               if(arg0 != null) {
>>                   arg0.addComponent(confirmBTN);
>>               }
>>           }
>>       };
>>       acceptCB.setRequired(true);
>>       form.add(new FormComponentFeedbackBorder("border").add(acceptCB));
>>   }
>>
>>   /**
>>    * Updates the enabled state of the delete button depending on
>> acceptance
>>    */
>>   private final void doUpdateConfirmButton() {
>>       boolean enabled = acceptCB.isEnabled();
>>       confirmBTN.setEnabled(enabled);
>>   }
>>
>
>

Re: Disabling component again with AjaxCheckBox

Posted by Steve Swinsburg <s....@lancaster.ac.uk>.
Call doUpdateConfirmButton() when the page first loads so you can set  
it up initially, then again when the checkbox is clicked as you  
already do.


cheers,
Steve


On 31/05/2009, at 7:40 AM, Rick Gruber-Riemer wrote:

> Hi
>
> I have a checkbox which must be checked for the user to be able to  
> submit
> (accept terms). I want the related submit button to be enabled only,  
> when
> the checkbox is checked. This works fine when the button initially is
> disabled, then the checkbox is checked by the user (I followed
> http://www.nabble.com/Disabling-and-enabling-components-using-AjaxCheckBox-td20911338.html#a20911338) 
> .
> However, when the user then unchecks the checkbox again, the button  
> does not
> get disabled again :-(
>
> Any suggestions?
>
>    <div wicket:id="feedback"></div>
>    <form wicket:id="form">
>        <span wicket:id="border"><input type="checkbox"  
> wicket:id="acceptCB"
> id="acceptCB" /></span>
>        <label for="acceptCB"><wicket:message key="acceptCB">[Accept
> delete]</wicket:message></label>
>        <br/>
>        <input type="submit" value="[Confirm]" id="confirmBtn"
> wicket:id="confirmBtn" wicket:message="value:confirmBtn"/>
>    </form>
>
> ==========
>
>    /** Whether or not the conditions for deletion are accepted. Acts  
> as
> IModel for the checkbox */
>    private boolean accepted = false;
>
>    /** The confirm button */
>    Button confirmBTN = null;
>
>    /** The accept check box */
>    CheckBox acceptCB = null;
>
>    public AccountDeletePage() {
>        add(new FeedbackPanel("feedback"));
>        Form form = new Form("form");
>        add(form);
>        confirmBTN = new Button("confirmBtn") {
>            @Override
>            public void onSubmit() {
>                doDelete();
>            }
>        };
>        confirmBTN.setEnabled(false);
>        confirmBTN.setOutputMarkupId(true); //not sure why this is  
> needed
>        form.add(confirmBTN);
>        //CheckBox acceptCB = new CheckBox("acceptCB", new
> PropertyModel(this, "accepted"));
>        acceptCB = new AjaxCheckBox("acceptCB",new PropertyModel(this,
> "accepted")) {
>            @Override protected void onUpdate(AjaxRequestTarget arg0) {
>                doUpdateConfirmButton();
>                if(arg0 != null) {
>                    arg0.addComponent(confirmBTN);
>                }
>            }
>        };
>        acceptCB.setRequired(true);
>        form.add(new  
> FormComponentFeedbackBorder("border").add(acceptCB));
>    }
>
>    /**
>     * Updates the enabled state of the delete button depending on
> acceptance
>     */
>    private final void doUpdateConfirmButton() {
>        boolean enabled = acceptCB.isEnabled();
>        confirmBTN.setEnabled(enabled);
>    }