【问题标题】:How to display a date in different patterns in JSF t:dataTable?如何在 JSF t:dataTable 中以不同模式显示日期?
【发布时间】:2013-07-03 07:36:59
【问题描述】:

我的页面中有下一个数据表:

<t:dataTable value="#{bean.listOfPersons}" var="current">
   <t:column>
      <t:outputText value="#{current.birthdate}">
         <f:converter pattern="dd/mm/yyyy HH:mm" type="date"/>
      </t:outputText>
   </t:column>
</t:dataTable>

Person 是我创建的一个对象,它的一个属性是生日。 现在我想在这个&lt;t:dateTable&gt; 中显示很多人的详细信息,包括生日。如您所见,我选择以dd/mm/yyyy HH:mm 模式显示生日,因此如果知道时间,我可以看到时间。现在,问题是一些生日没有时间(只有日期),当java.util.Date 中的时间是null 时,时间自动为00:00。如果时间未知(仅日期)如何以短模式显示出生日期,而当我知道时间(日期和时间)时如何显示常规模式?

现在发生了什么:

17/3/1994 5:56
1/1/1991 00:00
12/2/1990 17:53
21/12/2012 00:00

我想看的:

17/3/1994 5:56
1/1/1991
12/2/1990 17:53
21/12/2012

时间未知时的短模式。


这是我在page.xhtml中写的:

<t:outputText value="#{bean.date}">
<f:converter convertetId="myconverter" pattern="[some pattern]" timeZone="America/Chicago" type="date">
</t:outputText>

这是转换器:

public class MyConverter extends DateTimeConverter
{
@Override
public String getAsString (FacesContext faces, UIComponent comp, Object obj)
{
this.setTimeZone(null);
String result = super.getAsString(faces, comp, obj);
// My converter here...
return result;
}

@Override
public void setTimeZone(TimeZone tz)
{
// Always setting my own time zone, no matter what.
super.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
}
}

现在,如您所见,我自己总是将时区设置为 getAsString,因为 不知何故,现在 f:converter 无法识别它的属性...知道为什么吗?

【问题讨论】:

  • 刚读完。我认为您需要实现一个自定义转换器。我没有过多地使用 Java 日期,所以我不确定是否有一种模式已经可以处理您的场景。我要去睡觉了(现在是凌晨 4 点),所以如果没有人回答你,我会告诉你怎么做。不过,您应该尽快得到答案,这是一个简单的问题……然后我又知道要做出仓促的判断,所以我可能错了哈哈。
  • current.birthdate的数据类型是什么?
  • 正如安迪所说,使用自定义转换器是一个不错的选择(而且我认为是最好的)。另一个丑陋的解决方案是从您的 Person 对象中获取模式:&lt;f:converter pattern="#{current.birthdayPattern}" type="date"/&gt; 并在 getBirthdayPattern 中测试日期值
  • 谢谢,安迪和拉比迪。看来我必须做一个服装转换器,但我不知道该怎么做。 Laabidi,我想按照您的建议做类似的解决方案:创建一个仅用于显示的getter,如果我有时间,我会执行检查,并将日期作为具有合适模式的字符串返回。但是将来我会有很多带有日期的对象,我不想在每个对象中都做这个丑陋的解决方案。所以......我怎样才能创建一个自定义转换器?谢谢。 :)
  • erencan,current.birthdate 是一个java.util.Date,是我在Person 中创建的一个属性(即current)。

标签: jsf date


【解决方案1】:

使用 ocpsoft 的 PrettyTime 库。它有一个不错的pre-built converter for JSF,还支持不同的语言环境。

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 2011-05-11
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2011-06-16
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多