Калитка — странное поведение с параметризованной StringResourceModel

Это мой ключ ресурса:

Expired {0} days ago

Это определение StringResourceModel:

new StringResourceModel("store.expired.tooltip", null, Days.daysBetween(expirationDate, refDate));

Ожидаемый результат будет примерно Expired 20 days назад, но фактический результат будет Expired P20D ago.

Любая идея, что вызывает это? Я думаю, что делаю все правильно, но не уверен.


person Stijn Geukens    schedule 21.07.2012    source источник
comment
Что такое Days#daysBetween? Что он возвращает? Если он возвращает объект, какого он класса, и реализует ли этот класс toString()?   -  person npe    schedule 21.07.2012
comment
@DonRoby: Да, ты только что получил мой голос! :)   -  person npe    schedule 21.07.2012
comment
И мой, тоже спасибо npe.   -  person Stijn Geukens    schedule 21.07.2012


Ответы (1)


На самом деле это ошибка в использовании joda-time. См. javadoc для joda дней.

Days.daysBetween(expirationDate, refDate) возвращает объект joda Days, чей метод toString() возвращает строку формата длительности ISO8601, что вы и видите.

Вместо этого использование Days.daysBetween(expirationDate, refDate).getDays() сделает его целым числом, которое должно быть правильно отформатировано.

person Don Roby    schedule 21.07.2012
comment
Настолько сосредоточен на понимании StringResourceModel, что мне это никогда не приходило в голову; Я просто предположил, что он вернул int. Пора заканчивать, я думаю :-). Ткс! - person Stijn Geukens; 21.07.2012