Lukasz Lenart created WW-5757:
---------------------------------
Summary: BeanValidationInterceptor resolves the interpolated
constraint message as a text key instead of the message template
Key: WW-5757
URL: https://issues.apache.org/jira/browse/WW-5757
Project: Struts 2
Issue Type: Bug
Components: Plugin - Bean Validation
Reporter: Lukasz Lenart
Fix For: 7.5.0, 6.13.0
{{BeanValidationInterceptor}} builds the field and action error text from
{{ConstraintViolation.getMessage()}}, which is the message *after* the Bean
Validation provider has interpolated it, and passes that string to the Struts
text provider ({{getText(...)}}) as the text key.
The key a developer declares is the constraint's {{message}} attribute, which
is what {{ConstraintViolation.getMessageTemplate()}} returns. Using the
interpolated message as the key means:
* a developer-declared Struts key only resolves when the provider leaves the
message untouched;
* provider-interpolated text that matches no key is not shown as the provider
produced it, but is handed to the text provider as default text and processed
again, as if it were a Struts message.
The plugin documentation only promises that the {{message}} value is looked up
as a Struts key; it does not say that provider-produced text goes through the
text provider.
h2. Change
Resolve the error text from the template, and keep the provider's message
otherwise:
* look up {{getMessageTemplate()}} in the Struts bundles, and call {{getText}}
with it only when {{hasKey}} finds it;
* otherwise use {{ConstraintViolation.getMessage()}} as-is, as literal text;
* never pass the interpolated message to any text-provider method ({{getText}},
{{hasKey}}, {{findText}}).
h2. Tests
* A constraint whose provider-interpolated message contains text that the
Struts text provider would otherwise process is reported exactly as the
provider produced it.
* Existing tests where {{message}} is a Struts key keep resolving through the
bundle.
Apply the same change on the 6.x line.
h2. Documentation
The Bean Validation plugin page should state that {{message}} is looked up as a
Struts key, and that a message produced by the provider is shown literally.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)