Description
This ticket is a 2 in 1 issue:
#getThrowExceptionOnMissingResource() is given as VariableInterpolator ctor arg.
When you want to raise a validation error like:
ValidationError error = new ValidationError(); error.addKey("MyComponent.ConversionError"); error.setVariable("myvar", myvalue); this.error(error);
A call is made to FormComponent.MessageSource.substitute which returns new VariableInterpolator(...).toString()
The second arg to VariableInterpolator is meant for "exceptionOnNullVarValue" but what is supplied in #substitute() is Application.get().getResourceSettings().getThrowExceptionOnMissingResource().
That's where it looks strange because #getThrowExceptionOnMissingResource() represents a flag about missing resources (like MyComponent.properties) and has nothing related to null values in my understanding.
${var} is not replaced in case of null value (and null is allowed)
In the previous example, if #getThrowExceptionOnMissingResource() return false (meaning exceptionOnNullVarValue is false) and myvalue is null, the validation error message gives something of the form "value of myvar: ${myvar}" instead of "value of myvar: null".