根据问题中的评论:
@BalusC 我同意你所说的,在UI中格式化更好。因此我在我的jsf页面中添加了以下内容。
<p:inputText value="#{vacationschedule.convertTime(vacationschedule.selectedRow.startDate)}">
在managedBean中,convertTime
方法是什么意思?
public String convertTime(Date time){
Date date = new Date();
Format format = new SimpleDateFormat("yyyy MM dd");
return format.format(date);
}
<p:inputText>
正常显示,但如果想使用<p:calendar>
,就会出现错误:
SEVERE: java.lang.IllegalArgumentException: Cannot format given Object as a Date
你正在错误的方向上寻找解决方法。人类可读格式化应该在视图(UI)一侧完成,而不是模型或控制器一侧。
要在JSF组件中以人类友好方式呈现一个Date
对象,应该使用标准JSF组件集提供的<f:convertDateTime>
标记:
<p:inputText value="#{vacationschedule.selectedRow.startDate}">
<f:convertDateTime pattern="yyyy MM dd" />
</p:inputText>
这种方式可以始终保持属性只是Date
。这样,您还可以保存编辑后的值(这在您最初的尝试中是不可能的!)。
至于PrimeFaces的<p:calendar>
组件,它有一个pattern
属性,专门用于此目的:
<p:calendar value="#{vacationschedule.selectedRow.startDate}" pattern="yyyy MM dd" />
下载并查阅PrimeFaces 用户指南,了解所有可用的属性。
parse()
方法即可。然而,我无法看出它有什么用处。你最终可能会得到与开始时相同的Date
对象。如果你打算在某个UI中以人类可读的方式格式化它,那就在呈现给人类的那一刻精确地进行格式化。 - BalusC<p:inputText value="#{vacationschedule.convertTime(vacationschedule.selectedRow.startDate)}"
并且 managedBean 中的 convertTime 方法是public String convertTime(Date time){ Date date = new Date(); Format format = new SimpleDateFormat("yyyy MM dd"); return format.format(date); }
<p:inputText 显示正确,但如果我想使用<p:calendar
,则会出现错误“SEVERE:java.lang.IllegalArgumentException:无法将给定的对象格式化为日期”。 - Jacob