[
https://issues.apache.org/jira/browse/MYFACES-1734?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Fischer updated MYFACES-1734:
------------------------------------
Status: Patch Available (was: Open)
> In a custom validator method, the Message in the thrown ValidatorException is
> not used
> --------------------------------------------------------------------------------------
>
> Key: MYFACES-1734
> URL: https://issues.apache.org/jira/browse/MYFACES-1734
> Project: MyFaces Core
> Issue Type: Bug
> Components: General
> Affects Versions: 1.2.0
> Reporter: Thomas Fischer
>
> Situation: A custom validator is defined in a jsp, e.g.
> <h:inputSecret id="loginPass" value="#{loginController.password}"
> required="true" label="Password" validator="#{loginController.validate}"/>
> The error message from validation is displayed on the same page by
> <h:messages/>. For testing reasons, the validate method always throws an
> error:
> public void validate(FacesContext context, UIComponent component, Object
> value)
> {
> FacesMessage message
> = new FacesMessage(FacesMessage.SEVERITY_ERROR, "message summary",
> "message detail");
> throw new ValidatorException(message);
> }
> Expected behaviour: After a form submit, the error message "message summary"
> should be displayed by the <h:messages/> tag.
> Observed behaviour: An empty message is displayed by the <h:messages/> tag.
> Reason: in
> javax.faces.validator.MethodExpressionValidator#validate(FacesContext,
> UIComponent, Object), all ELExceptions are caught, and a ValidationException
> with a empty message is thrown. This empty message is then displayed by
> <h:messages/>
> Resolution: The original ValidatorException is still contained as cause of
> the ElException. This is required by the contract of MethodExpression.invoke:
> <quote>
> ... throws ELException - if an exception was thrown while performing property
> or variable resolution. The thrown exception must be included as the cause
> property of this exception, if available...
> </quote>
> So one should retrieve the cause of the ELException and check whether it is a
> ValidatorException. If yes, the cause(containing the original message) should
> be rethrown. If no, the error is not a validation error but something else,
> then the ELException should be rethrown (Reason for this: In the current
> implementation, if another error (no validation error) occurs, e.g. the user
> mistypes the method name in the jsp, no exception stack trace is displayd but
> only an empty faces message is added. It is very difficult to find the error.
> Re-throwing the EL exception removes this problem.)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.