mailconfirm.mail.body=<html><body><h3 style="margin: 0 0 1em;">Hi, {0}!</h3>\ To confirm your email address click on the confirmation link given bellow. If clicking on the link doesn't work, copy and paste the link in a new browser tab. <br /><br />\ <a href="http://www.domain.com/confirm_email.html?action=activate&hash={1}">http://www.domain.com/confirm_email.html?action=activate&hash={1}</a><br /><br />\ Kind regards,<br />\ Your Something </body></html>
This above is the particular message used for the code bellow.
String country = "AU"; Object[] args = new Object[] { account.getLogin(), confirm.getHash() }; helper.setText(appContext.getMessage("mailconfirm.mail.body", args, new Locale(country)), true);
I debugged both arguments and they both have the right values. When debuging appContext.getMessage
line, I saw that the {1}
param is not filled with correct value however {0}
is.
Any ideas what could be wrong? I suspect it could be some locale issue.
Issue solved! It appears that the problem was because the message mailconfirm.mail.body contained an apostrophe somewhere after {0} and between {1}. After replaced doesn't
with does not
it fixed the problem. I didn't know apostrophes can't be used in there. P.S. Is it a bug or just my mistake and apostrophes should be escaped?
mailconfirm.mail.body=<html><body><h3 style="margin: 0 0 1em;">Hi, {0}!</h3>\ To confirm your email address, click on the confirmation link given bellow. If clicking on the link doesn't work, copy and paste the link in a new browser tab. <br /><br />\ <a href="http://www.domain.com/confirm_email.html?action=activate&hash={1}">http://www.domain.com/confirm_email.html?action=activate&hash={1}</a><br /><br />\ Kind regards,<br />\ Your Something </body></html>
One doesn't
took me about an hour to figure it out and push a fix. Hahaha.. From now on I consider apostrophes being evil!
Spring's ResourceBundleMessageSource
(which I think you are using) uses MessageFormat
for replacing placeholders ({0}
) inside messages. MessageFormat
requires that single quotes ('
) are escaped using two single quotes (''
) (see: MessageFormat Javadoc).
However, by default messages that do not contain any arguments will not be parsed by MessageFormat
. So single quotes in messages without arguments don't need to be escaped.
ResourceBundleMessageSource
provides a flag called alwaysUseMessageFormat
that can be used if MessageFormat
should be applied to all messages. So a single quote need always be escaped by two single quotes.
See this blog post for more details.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With