1

私はたまたま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で言及されていても、ライブラリで提供されるリソース バンドル (パッケージ内)では利用できません。

4

1 に答える 1

1

コンストラクターに間違ったパラメーターを渡していました。したがって、将来の時間を示す間違ったメッセージです。それらは次のようになります。

PrettyTime time=new PrettyTime(new Date(), locale);
time.format(lastInquiry.toDate());
//lastInquiry is fetched from the database which a customer made an inquiry on.

ロケールHI(ヒンディー語用) およびその他の多くのロケールは、最新バージョン3.2.5 finalで利用できます。


JSF コンバーター、

com.ocpsoft.pretty.time.web.jsf.PrettyTimeConverter

に再パッケージされています

org.ocpsoft.prettytime.jsf.PrettyTimeConverter

別の jar ファイルprettytime-integration-jsfに移動されました。

このコンバーターを JSF で使用する場合は、コア jar ファイルに加えて、この jar ファイルも必要です。

于 2014-06-21T17:51:27.890 に答える