我有一个包含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 minutes
,1 hour and 10 minutes
或3 months, 2 hours and 5 minutes
。
我的问题很简单:有更好的方法吗?我为格式化程序尝试了一个简单的Producer方法,但由于PeriodFormatter
没有公开no-arg构造函数,因此无法使用CDI。
奖金问题:这可能是omnifaces'日期函数的一个很好的补充吗?