Re: Support for submitting unchecked checkboxes
Yes but how do you set that hidden field if the checkbox value changes? You must also use javascript then i believe johan - Original Message - From: "Howard Moore" [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, February 22, 2001 11:04 AM Subject: RE: Support for submitting unchecked checkboxes One problem with this is that it fails if javascript is disabled on the client. An alternative hack would be to have a hidden field and the checkbox both with the same name and have Struts process them as a special case when populating the ActionForm. -Original Message- From: Johan Compagner [mailto:[EMAIL PROTECTED]] Sent: 22 February 2001 09:03 To: [EMAIL PROTECTED] Subject: Re: Support for submitting unchecked checkboxes +1 Please insert this (or something like this) in the 1.0 code base, because checkboxes are useless at this time to use!! johan - Original Message - From: "Laine Donlan" [EMAIL PROTECTED] To: "Struts Dev (E-mail)" [EMAIL PROTECTED] Sent: Tuesday, February 20, 2001 2:19 PM Subject: Support for submitting unchecked checkboxes In order to capture the act of a user unchecking checkboxes and to initialize the checkbox as checked/unchecked with non boolean values I made a couple of changes to the org.apache.struts.taglib.html.CheckboxTag. Basically the changes consisted of: 1) Using the supplied value attribute to match against the bean property value and generating the 'checked' attribute accordingly. If the value is not supplied then the previously implemented method of checking 'on', 'true', or 'yes' is performed. So I do not think that default behavior should be affected. 2) Added support for two new attributes - submitUnchecked (boolean) and uncheckedValue (String). Neither of these attributes are required and the submitUnchecked defaults to 'false'. If a user chooses to submit unchecked values then two form inputs will be generated that facilitate this function. See below for an example: Tag notation - html:checkbox name="bean" property="indexedBean.property" submitUnchecked="true" uncheckedValue="0" value="1"/ Generated HTML - input type="checkbox" name="indexedBean.property_checkBox" value="1" onclick="(this.checked?this.form['indexedBean.property'].value ='1':this. form['indexedBean.property'].value='0')" input type="hidden" name="indexedBean.property" value="0"/ (where 0 is the current value of the bean property) So in this scenario the actual checkbox param in the request will be ignored and the hidden input will be used to maintain the bean property that the user wishes. In the case where the user does not provide the two new attributes the html will be generated as it is today with the exception of the determination of the checked or unchecked mentioned above. I could not see how this functionality was present in the current checkbox tag without explicitly declaring two tags and adding javascript to the checkbox tag. Even then some scripting may be required to differentiate between the two inputs and to initialize the hidden one. If I missed something could someone point me in the right direction. I have attached the CheckboxTag.java file for review and use if anyone is interested. CheckboxTag.zip Thanks. Comments would be appreciated. Laine
RE: Support for submitting unchecked checkboxes
You don't change the hidden field at all. For example, given the following html; input type="hidden" name="checkbox" value="off"/ input type="checkbox" name="checkbox" If the checkbox is unchecked the value "checkbox=off" would be part of the submitted request. If the checkbox is checked the value would be "checkbox=offcheckbox=on". The code that populates the ActionForm would then have to be modified to set the boolean "checkbox" property to false only if it had not already been set to true. -Original Message- From: Johan Compagner [mailto:[EMAIL PROTECTED]] Sent: 22 February 2001 10:23 To: [EMAIL PROTECTED] Subject: Re: Support for submitting unchecked checkboxes Yes but how do you set that hidden field if the checkbox value changes? You must also use javascript then i believe johan - Original Message - From: "Howard Moore" [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, February 22, 2001 11:04 AM Subject: RE: Support for submitting unchecked checkboxes One problem with this is that it fails if javascript is disabled on the client. An alternative hack would be to have a hidden field and the checkbox both with the same name and have Struts process them as a special case when populating the ActionForm. -Original Message- From: Johan Compagner [mailto:[EMAIL PROTECTED]] Sent: 22 February 2001 09:03 To: [EMAIL PROTECTED] Subject: Re: Support for submitting unchecked checkboxes +1 Please insert this (or something like this) in the 1.0 code base, because checkboxes are useless at this time to use!! johan - Original Message - From: "Laine Donlan" [EMAIL PROTECTED] To: "Struts Dev (E-mail)" [EMAIL PROTECTED] Sent: Tuesday, February 20, 2001 2:19 PM Subject: Support for submitting unchecked checkboxes In order to capture the act of a user unchecking checkboxes and to initialize the checkbox as checked/unchecked with non boolean values I made a couple of changes to the org.apache.struts.taglib.html.CheckboxTag. Basically the changes consisted of: 1) Using the supplied value attribute to match against the bean property value and generating the 'checked' attribute accordingly. If the value is not supplied then the previously implemented method of checking 'on', 'true', or 'yes' is performed. So I do not think that default behavior should be affected. 2) Added support for two new attributes - submitUnchecked (boolean) and uncheckedValue (String). Neither of these attributes are required and the submitUnchecked defaults to 'false'. If a user chooses to submit unchecked values then two form inputs will be generated that facilitate this function. See below for an example: Tag notation - html:checkbox name="bean" property="indexedBean.property" submitUnchecked="true" uncheckedValue="0" value="1"/ Generated HTML - input type="checkbox" name="indexedBean.property_checkBox" value="1" onclick="(this.checked?this.form['indexedBean.property'].value ='1':this. form['indexedBean.property'].value='0')" input type="hidden" name="indexedBean.property" value="0"/ (where 0 is the current value of the bean property) So in this scenario the actual checkbox param in the request will be ignored and the hidden input will be used to maintain the bean property that the user wishes. In the case where the user does not provide the two new attributes the html will be generated as it is today with the exception of the determination of the checked or unchecked mentioned above. I could not see how this functionality was present in the current checkbox tag without explicitly declaring two tags and adding javascript to the checkbox tag. Even then some scripting may be required to differentiate between the two inputs and to initialize the hidden one. If I missed something could someone point me in the right direction. I have attached the CheckboxTag.java file for review and use if anyone is interested. CheckboxTag.zip Thanks. Comments would be appreciated. Laine
Support for submitting unchecked checkboxes
In order to capture the act of a user unchecking checkboxes and to initialize the checkbox as checked/unchecked with non boolean values I made a couple of changes to the org.apache.struts.taglib.html.CheckboxTag. Basically the changes consisted of: 1) Using the supplied value attribute to match against the bean property value and generating the 'checked' attribute accordingly. If the value is not supplied then the previously implemented method of checking 'on', 'true', or 'yes' is performed. So I do not think that default behavior should be affected. 2) Added support for two new attributes - submitUnchecked (boolean) and uncheckedValue (String). Neither of these attributes are required and the submitUnchecked defaults to 'false'. If a user chooses to submit unchecked values then two form inputs will be generated that facilitate this function. See below for an example: Tag notation - html:checkbox name="bean" property="indexedBean.property" submitUnchecked="true" uncheckedValue="0" value="1"/ Generated HTML - input type="checkbox" name="indexedBean.property_checkBox" value="1" onclick="(this.checked?this.form['indexedBean.property'].value='1':this. form['indexedBean.property'].value='0')" input type="hidden" name="indexedBean.property" value="0"/ (where 0 is the current value of the bean property) So in this scenario the actual checkbox param in the request will be ignored and the hidden input will be used to maintain the bean property that the user wishes. In the case where the user does not provide the two new attributes the html will be generated as it is today with the exception of the determination of the checked or unchecked mentioned above. I could not see how this functionality was present in the current checkbox tag without explicitly declaring two tags and adding javascript to the checkbox tag. Even then some scripting may be required to differentiate between the two inputs and to initialize the hidden one. If I missed something could someone point me in the right direction. I have attached the CheckboxTag.java file for review and use if anyone is interested. CheckboxTag.zip Thanks. Comments would be appreciated. Laine CheckboxTag.zip