Frage

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>

Dies oben ist die spezielle Nachricht, die für den folgenden Code verwendet wird.

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

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

Ich habe beide Argumente debuggt und beide haben die richtigen Werte.Beim Debuggen der appContext.getMessage-Zeile habe ich festgestellt, dass der {1}-Parameter nicht mit dem richtigen Wert gefüllt ist, der {0} jedoch.

Irgendwelche Ideen, was falsch sein könnte?Ich vermute, es könnte sich um ein Gebietsschema handeln.

War es hilfreich?

Lösung

Problem gelöst! Es scheint, dass das Problem darin bestand, dass die Nachricht mailconfirm.mail.body irgendwo nach {0} und zwischen {1} ein Apostroph enthielt.Nachdem der doesn't durch den does not ersetzt wurde, wurde das Problem behoben.Ich wusste nicht, dass Apostrophe dort nicht verwendet werden können. P.S.Ist es ein Fehler oder nur mein Fehler und Apostrophe sollten entkommen?

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>

Ein doesn't hat ungefähr eine Stunde gedauert, um es herauszufinden und eine Lösung zu finden.Hahaha .. Von nun an halte ich Apostrophe für böse!

Andere Tipps

Der ResourceBundleMessageSource von Spring (den Sie vermutlich verwenden) verwendet den MessageFormat, um Platzhalter ({0}) in Nachrichten zu ersetzen.MessageFormat erfordert, dass einfache Anführungszeichen (') mit zwei einfachen Anführungszeichen ('') maskiert werden (siehe: MessageFormat Javadoc ).

Standardmäßig werden Nachrichten, die keine Argumente enthalten, jedoch nicht durch MessageFormat analysiert.Einfache Anführungszeichen in Nachrichten ohne Argumente müssen also nicht maskiert werden.

ResourceBundleMessageSource bietet ein Flag namens alwaysUseMessageFormat, das verwendet werden kann, wenn MessageFormat auf alle Nachrichten angewendet werden soll.Ein einfaches Anführungszeichen muss also immer von zwei einfachen Anführungszeichen umgangen werden.

Weitere Informationen finden Sie in diesem Blogbeitrag .

Ich kann mein Geschäftsteam nicht davon überzeugen, an den erforderlichen Stellen doppelte Apos hinzuzufügen, und manchmal vergessen sie es auch. Also habe ich ReloadableResourceBundleMessageSource#loadProperties einfach überschrieben als: Wenn der Wert "'" & "{0" enthält, ersetzen Sie den "'" durch "''" und geben Sie ihn mit demselben Schlüssel in die Eigenschaften ein.

Eine Alternative besteht darin, String.format zu verwenden und den {X} für %s zu ändern.

mailconfirm.mail.body=<html><body><h3 style="margin: 0 0 1em;">Hi, %s!</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/confirm_email.html?action=activate&hash=%s">http://www.domain/confirm_email.html?action=activate&hash=%s</a><br /><br />\
    Kind regards,<br />\
    Your Something
    </body></html>


String whatEver = messageSource.getMessage("mailconfirm.mail.body", null, locale);

whatEver = String.format(whatEver,account.getLogin(), confirm.getHash() );

Hoffe, es ist nützlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top