以一种很好的方式打印org.joda.time.Period对象

时间:2014-02-17 12:45:38

标签: jsf-2 jodatime omnifaces

我有一个包含org.joda.time.Minutes字段的实体。我想在我的一个<h:selectOneMenu>组件中使用该字段作为标签:

<h:selectOneMenu value="#{manager.spec}"
        converter="omnifaces.SelectItemsIndexConverter">
    <f:selectItem itemLabel="#{msg.choose_one}" />
    <f:selectItems value="#{allSpecs}" var="spec" 
        itemLabel="#{f.print(spec.timeout.toStandardDuration().toPeriod())}" />
</h:selectOneMenu>

使用f(显然只是一个演示名称):

@Named("f")
@RequestScoped
public class UserPeriodFormatter {
    private PeriodFormatter printer;

    @PostConstruct
    public void init() {
        printer = PeriodFormat.wordBased(Faces.getLocale());
    }

    public String print(ReadablePeriod period) {
        return printer.print(period);
    }
}

这打印,例如。使用用户区域设置中的字词5 minutes1 hour and 10 minutes3 months, 2 hours and 5 minutes

我的问题很简单:有更好的方法吗?我为格式化程序尝试了一个简单的Producer方法,但由于PeriodFormatter没有公开no-arg构造函数,因此无法使用CDI。

奖金问题:这可能是omnifaces'日期函数的一个很好的补充吗?

0 个答案:

没有答案