35
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>

上記は、以下のコードに使用される特定のメッセージです。

String country = "AU";
Object[] args = new Object[] { account.getLogin(), confirm.getHash() };

helper.setText(appContext.getMessage("mailconfirm.mail.body", args,
                new Locale(country)), true);

両方の引数をデバッグしましたが、どちらも正しい値を持っています。appContext.getMessage行をデバッグしているときに、 {1}param に正しい値が入力されていないことがわかりました{0}

何が間違っている可能性がありますか?ロケールの問題である可能性があると思います。

4

4 に答える 4

71

問題解決!メッセージ mailconfirm.mail.body の {0} の後と {1} の間のどこかにアポストロフィが含まれていたため、問題が発生したようです。それに交換doesn'tした後does not、問題は修正されました。そこにアポストロフィが使えないとは知りませんでした。PSそれはバグですか、それとも私の間違いですか?アポストロフィはエスケープする必要がありますか?

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>

それを理解して修正をプッシュするのに約1doesn't時間かかりました. ハハハ.. これからは、アポストロフィは悪だと思います!

于 2011-06-13T15:36:53.733 に答える
37

Spring ResourceBundleMessageSource(あなたが使用していると思います)は、メッセージ内MessageFormatのプレースホルダー()を置き換えるために使用し{0}ます。単一引用符 ( ) は、2 つの単一引用符 ( ) を使用してエスケープMessageFormatする必要があります ( MessageFormat Javadocを参照)。'''

ただし、デフォルトでは、引数を含まないメッセージは によって解析されませんMessageFormat。したがって、引数のないメッセージ内の一重引用符はエスケープする必要はありません。

ResourceBundleMessageSourceすべてのメッセージに適用する必要があるalwaysUseMessageFormat場合に使用できる、というフラグを提供します。MessageFormatしたがって、一重引用符は常に 2 つの一重引用符でエスケープする必要があります。

詳細については、このブログ投稿を参照してください。

于 2013-10-04T17:27:20.560 に答える