私はたまたまpretty time 1.0.6 を使用して、人間が読める形式で 2 つの時点の間の間隔を表示しました。
組み込みの JSF コンバーターがあり、
com.ocpsoft.pretty.time.web.jsf.PrettyTimeConverter
ただし、オブジェクトのみをサポートしjava.util.Date
ます。
たまたま次のコンバーターを使用しましたorg.joda.time.DateTime
@ManagedBean
@ApplicationScoped
public final class PrettyJodaTimeConverter extends PrettyTimeConverter
{
@Override
public String getAsString(final FacesContext context, final UIComponent component, final Object value)
{
if (value instanceof DateTime) {
return super.getAsString(context, component, ((DateTime) value).toDate());
} else {
return super.getAsString(context, component, value);
}
}
}
<h:outputText>
これは、たとえば、「4 時間前」などの間隔を表示します。
<h:outputText value="#{productInquiryManagedBean.lastInquiry}"
converter="#{prettyJodaTimeConverter}"/>
しかし、JSF マネージド Bean の条件チェックに基づいて<p:growl>
(または<p:messages>
、 ) にメッセージを表示する必要があります。<h:messages>
したがって、このコンバーターは使用できません (使用できる場合は提案してください)。代わりに、問題のマネージド Bean で次のように手動でフォーマットする必要があります。
private DateTime lastInquiry;
private String emailId;
private Product product;
if(productInquiryService.isPeriodExpired(30, emailId, product))
{
lastInquiry=productInquiryService.getDateTimeOfLastInquiry(email, product);
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
PrettyTime time=new PrettyTime(lastInquiry.toDate(), locale);
time.setLocale(locale);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, Utility.getMessage("faces.message.error"), Utility.getMessage("inquiry.min.time.expire", time.format(new Date()))));
}
これは、「今から 4 時間後<p:growl>
に照会を行いました」のようなメッセージを表示します。
このメッセージフォーマットを上記のように「4時間前に問い合わせました」に変更できます<h:outputText>
か?
また、ここに表示される間隔形式は、リソース バンドルの特定の位置にローカライズされていません。常にデフォルトのロケールを使用しているようです。によって生成されるメッセージPrettyTime#format()
はローカライズする必要があります。
コンストラクターに間違ったパラメーターを渡していました。したがって、将来の時間を示す間違ったメッセージです。それらは次のようになります。
PrettyTime time=new PrettyTime(new Date(), locale);
time.format(lastInquiry.toDate());
//lastInquiry is fetched from the database which a customer made an inquiry on.
「4 時間前」のような正しい (過去の時間) 形式で表示されるようになりました。
私が探していたロケールHI
(実際hi_IN
には、インドではヒンディー語) は、 i18n および複数言語のサポートセクションcom.ocpsoft.pretty.time.i18n
で言及されていても、ライブラリで提供されるリソース バンドル (パッケージ内)では利用できません。