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

Jakob Korherr commented on MYFACES-3300:
----------------------------------------

Hi Michi,

I found the bug. The problem originates from the new ContextAware exception 
reporting system in MyFaces: In MethodExpressionValidator.validate() the 
validator gets called in a try {} catch (ELException) {} block, and in the 
catch block the caught ELException is checked if it was caused by a 
ValidatorException. In MyFaces 2.1.1 (and before) this was true, b/c it was an 
ELException which was caused by a ValidatorException. Now, due to the exception 
reporting system, it is a ContextAwareELException which was caused by an 
ELException which was caused by a ValidatorException. Thus the check fails and 
the ValidatorException is not handled as a validation error, but as an 
ELException, and thus the error.

Fortunately, in your case there is an easy fix, which I'd recommend anyway: use 
immediate="true" on the h:selectBooleanCheckbox! This will move the 
ValueChangeEvent to the end of phase 2 and thus the validator won't even be 
called and the state will also not be lost, b/c the submitted values have 
already been applied.

If you check your example again with MyFaces 2.1.1 (and before), you will see 
that without immediate="true" on the h:selectBooleanCheckbox you will also see 
the error there, however not on the browser via javascript alert, but in the 
server log as unhandled FacesMessage (which was created by the properly handled 
ValidationException), looking like this:

WARNUNG: There are some unhandled FacesMessages, this means not every 
FacesMessage had a chance to be rendered.
These unhandled FacesMessages are: 
- Kreditkartennummer muss aus 4 Ziffern bestehen.

Thanks a lot for reporting this! It tells us that the validation via the 
validator="" attribute is totally broken in MyFaces 2.1.2. This is a 
dealbreaker for the 2.1.3 release.

> Ajax behavior change from 2.1.1 to 2.1.2
> ----------------------------------------
>
>                 Key: MYFACES-3300
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3300
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.2
>            Reporter: Michael Kurz
>            Assignee: Jakob Korherr
>         Attachments: MYFACES-3300-test.zip
>
>
> I am currently trying to update some examples to Myfaces 2.1.2 and ran into 
> some ajax related problems. I have a h:selectBooleanCheckbox component that 
> collapses and expands two input fields via f:ajax. There is a value change 
> listener for the checkbox that sets the value internally and calls 
> renderResponse(). In f:ajax, those input fields are also listed in execute to 
> preserve the input the user has potentially made. So far, I had no problems 
> with this solution. The validation for the input fields did not kick in (or 
> did not bother me) and the values were preserved.
> With 2.1.2 I have two issues:
> 1) Even if the input values are valid the values in the input fields vanish 
> when they are expanded and collapsed again.
> 2) Now validation kicks in for invalid values and I get an error message in 
> the browser
> This works with all older versions I tried (2.0.4, 2.1.0 and 2.1.1).
> Would be interesting to know what really changed here!

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to