I think this affects checkboxes too... Anyone interest in taking a look?
Luca ----- Original Message ----- > From: "Luca Menegus" <luca.mene...@dbmsrl.com> > To: "Tapestry users" <users@tapestry.apache.org> > Sent: Monday, September 2, 2013 9:50:28 PM > Subject: Re: [T5.3.7 BUG] RadioGroup doesn't honor disabled parameter > > ... If you're going to use the example classes I provided note that method > onActionFromResetvalues should also reset the vowel var > > public void onActionFromResetvalues() { > booleanValue = null; > textValue = null; > vowel = null; //<<<missing reset > > } > bye, > Luca > > ----- Original Message ----- > > From: "Luca Menegus" <luca.mene...@dbmsrl.com> > > To: "Tapestry users" <users@tapestry.apache.org> > > Sent: Monday, September 2, 2013 9:35:44 PM > > Subject: [T5.3.7 BUG] RadioGroup doesn't honor disabled parameter > > > > Hi all, > > I just found a bug with RadioGroup/Radio not honoring their disabled state > > (It drove me quite mad...). > > > > In RadioGroup submission is processed regardless of the disabled parameter > > value. > > > > In Fields derived from AbstractField submission processing is skipped > > altogether when the field is disabled (From Abstract Field): > > [...] > > > > > > private void processSubmission() > > { > > if (!disabled) > > processSubmission(controlName); > > } > > [...] > > > > The fix should be quite trivial. Anyway I might provide a patch (with test) > > but I'm not sure as I'm going abroad and don't know if I'll have access to > > the internet in the next days. > > > > While I was debugging it I created a test class [1] and page [2] that can > > be > > used to analyse what's going on . > > > > One last thing is that the behavior of radio group together with Boolean > > values (Capital B) is somehow unexpected as it would set the value of the > > bound property to false even if no selection has been made (that's probably > > because there is a coercion from null to false - and has nothing to do with > > the component disabled state anyway). My use case is that I want to force > > my > > user to make an explicit decision on some contract agreement. One > > "solution" > > could be to ignore standard coercion in RadioGroup iif the bound value > > class > > is Boolean > > > > bye, > > Luca > > > > [1] > > > > > > public class TestRadio { > > > > @Persist > > @Property > > private Boolean booleanValue; > > @Persist > > @Property > > private String textValue; > > > > @Persist > > @Property > > private boolean formDisabled; > > > > @Persist > > @Property > > private VOWEL_ENUM vowel; > > > > public Boolean getOn() { > > return Boolean.TRUE; > > } > > > > public Boolean getOff() { > > return Boolean.FALSE; > > } > > > > public VOWEL_ENUM getA() { > > return VOWEL_ENUM.A; > > } > > > > public VOWEL_ENUM getE() { > > return VOWEL_ENUM.E; > > } > > > > public VOWEL_ENUM getI() { > > return VOWEL_ENUM.I; > > } > > > > public VOWEL_ENUM getO() { > > return VOWEL_ENUM.O; > > } > > > > public VOWEL_ENUM getU() { > > return VOWEL_ENUM.U; > > } > > > > public boolean isBooleanValueNull() { > > return booleanValue == null; > > } > > > > public boolean isTextValueNull() { > > return textValue == null; > > } > > > > public boolean isVowelNull() { > > return vowel == null; > > } > > > > public void onActionFromResetvalues() { > > booleanValue = null; > > textValue = null; > > } > > > > public void onActionFromEnableFormControls() { > > formDisabled = false; > > } > > > > public void onActionFromDisableFormControls() { > > formDisabled = true; > > } > > > > public static enum VOWEL_ENUM { > > A, E, I, O, U; > > } > > } > > [2] > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" > > xmlns:p="tapestry:parameter"> > > <h2>DATA</h2> > > <p> > > booleanValue is '${booleanValue}' > > <t:if test="booleanValueNull"> (NULL)</t:if> > > </p> > > <p> > > textValue is '${textValue}' > > <t:if test="textValueNull"> (NULL)</t:if> > > </p> > > <p> > > vowel is '${vowel}' > > <t:if test="vowelNull"> (NULL)</t:if> > > </p> > > <t:actionLink t:id="resetvalues">Reset values</t:actionLink> > > <h2>CONTROL DISABLE STATUS</h2> > > <t:if test="formDisabled"> > > <p> > > Form controls are > > <b>disabled</b> > > !! > > </p> > > <t:actionLink t:id="enableFormControls">Enable form controls</t:actionLink> > > <p:else> > > <p>Form controls are enabled</p> > > <t:actionLink t:id="disableFormControls">Disable form > > controls</t:actionLink> > > </p:else> > > </t:if> > > > > <h2>FORM</h2> > > <t:form> > > <b>Expected behavior</b> > > <p>When disabled I will not update my value</p> > > <t:label for="textValue" /> > > <t:textField t:id="textValue" disabled="formDisabled" /> > > > > <b>Buggy behavior</b> > > <p>When disabled I'm still updating my value (and since no value is > > selected > > I will set it to null)</p> > > <t:label for="vowel" /> > > <t:radioGroup t:id="vowel" disabled="formDisabled"> > > <t:label for="A" /> > > <t:radio t:id="A" /> > > <t:label for="E" /> > > <t:radio t:id="E" /> > > <t:label for="I" /> > > <t:radio t:id="I" /> > > <t:label for="O" /> > > <t:radio t:id="O" /> > > <t:label for="U" /> > > <t:radio t:id="U" /> > > </t:radioGroup> > > <b>Buggy and somehow unexpected behavior</b> > > <p>When disabled I'm still updating my value.</p> > > <p>Moreover I'm updating my value to false (possibly because there is a > > coercion from null to false)</p> > > <p>This is somehow unexpected as I can't set my value to null (or > > unselected) > > even when I'm enabled</p> > > <t:label for="booleanValue" /> > > <t:radioGroup t:id="booleanValue" disabled="formDisabled"> > > <t:label for="on" /> > > <t:radio t:id="on" /> > > <t:label for="off" /> > > <t:radio t:id="off" /> > > </t:radioGroup> > > <t:submit /> > > </t:form> > > </html> > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org