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

Lukas Lieb commented on MYFACES-4755:
-------------------------------------

[https://github.com/apache/myfaces/pull/1008]

https://github.com/apache/myfaces/pull/1009

> Only one BeanValidation on value as ParametrizableFacesMessage does not 
> overwrite equals/hashCode
> -------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-4755
>                 URL: https://issues.apache.org/jira/browse/MYFACES-4755
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 4.1.3
>            Reporter: Lukas Lieb
>            Priority: Major
>
> If I have multiple BeanValidation annotations on one field, that report a 
> validation message, only one will be shown in the UI. E.g. consider the 
> following class:
> {code:java}
> @Size(min = 2)
> @UpperCase
> @Target( { METHOD, FIELD, ANNOTATION_TYPE })
> @Retention(RUNTIME)
> @Constraint(validatedBy = ValidLicensePlateValidator.class)
> @Documented
> public @interface ValidLicensePlate {
>     String message() default "Field does not contain a valid license plate 
> (e.g. SZ45232)";
>     Class<?>[] groups() default {};
>     public abstract Class<? extends Payload>[] payload() default {};
> } {code}
> With a value of e.g. 's' it should report at least 3 messages:
>  * should be uppercase
>  * min size
>  * does not match regex 2 chars then numbers
>  
> The `jakarta.faces.validator.BeanValidator#validate` method does collect all 
> constraintViolations and convert them into a FacesMessages Set. 
> [https://github.com/apache/myfaces/blob/4.1.x/api/src/main/java/jakarta/faces/validator/BeanValidator.java#L224-L232]
> However, since the `jakarta.faces.application.FacesMessage` has implemented 
> equals and hashCode methods (since v4.1), only the first message is added to 
> the Set.
> Why? Because the `MessageUtils.getErrorMessage(context, MESSAGE_ID, args)` 
> does create objects of type 
> `org.apache.myfaces.core.api.shared.ParametrizableFacesMessage` so the 
> summary of the messages are always something like `\{0}: \{1}`. So the 
> hashCode for all messages is the same even if the args are not.
> So IMO the ParametrizableFacesMessage should also implement the equals and 
> hashCode methods, so all the messages are added to the Set again.
>  
> Probably this is also a problem on v5.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to