[ 
https://issues.apache.org/jira/browse/MYFACES-1467?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12464106
 ] 

David Chandler commented on MYFACES-1467:
-----------------------------------------

Cristi,

Good catch. Just to clarify, you're saying what's broken is that you can no 
longer use required="true" and disabled="true" together, correct? I'm actually 
surprised this ever worked, as these two attributes would seem in conflict with 
each other. Conceptually, if an input component is disabled, validation can be 
skipped, so the conditions could be added; however, the spec does not exempt 
validation from occurring in the case of disabled or readonly, whereas it 
explicitly states that required="true" with a null value should result in an 
error. Therefore, a strict reading of the spec would seem to indicate that 
required="true" and disabled="true" should in fact result in a validation error 
because required="true" implicitly takes precedence.

Having said that, I'm OK with adding conditions to skip validation for disabled 
or readonly components even when required="true", as this was the de facto 
behavior before this fix.

I understand now how a submitted value of null is "special." Rather than put in 
explicit checks to call validation only when a field is editable (not disabled 
or readonly), the current code relies on the fact that the submitted value is 
null in these cases, and therefore validation is skipped. Whether this was by 
design or by accident, I wonder. Interestingly, UIInput.processValidators() 
method skips validation if the component is not rendered. Perhaps we should add 
checks for disabled and readonly in the same method, as validate() needn't even 
be called if these attributes are true.

I guess it all depends on how strictly we interpret the spec regarding the 
required attribute. As for where we put the conditions, that depends on whether 
it ever possible for a disabled or readonly component to have a non-null 
submitted value. Does anyone know?

/dmc

> Validation doesn't run for required fields if submitted value is null
> ---------------------------------------------------------------------
>
>                 Key: MYFACES-1467
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1467
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 1.1.5-SNAPSHOT, 1.2.0-SNAPSHOT
>            Reporter: David Chandler
>         Assigned To: Matthias Weßendorf
>             Fix For: 1.1.5-SNAPSHOT
>
>         Attachments: patch.txt
>
>
> A component with a required value will not fail validation as expected if the 
> submitted value is null. This issue is not seen normally because browsers 
> send the value for an empty text field as an empty string. That is, the POST 
> data for an empty field1 will contain the field name but no value, like 
> field1=&field2=something. However, if you use a man-in-the-middle proxy such 
> as Paros to remove "fieldname=" from the POST data, the submitted value will 
> be null. UIInput.validate() skips validation for null submitted values, but 
> since requiredness is also part of validation, the requiredness check gets 
> skipped, too.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to