1

我碰巧使用漂亮的时间1.0.6 以人类可读的格式显示两个时间点之间的间隔。

有一个内置的 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);
        }
    }
}

这会显示一个时间间隔,例如“4 小时前” <h:outputText>,例如

<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()))));
}

这会显示一条消息,<p:growl>例如“您在4 小时后进行了查询”。

这条消息格式可以更改为“您在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印度的印地语)在库中提供的资源包(在com.ocpsoft.pretty.time.i18n包中)中不可用,即使在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.

最新版本3.2.5 final中提供了语言环境HI(用于印地语)和许多其他语言环境。


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 回答