在我的JSF托管bean中,我已将startDate声明为java.utilDate类型,并且我也有getter和setter。从数据库startDate是日期类型。
当我收到值格式是默认类型时,我格式化日期
SimpleDateFormat df = new SimpleDateFormat(" dd MMM yyyy");
Date oneDate = new Date(startDate);
df.format(oneDate);
我面临的问题是df.format(oneDate);
返回String。
是否可以将df.format(oneDate)
转换回日期,以便我无需这样做
更改我的startDate数据类型。
非常感谢任何帮助。
由于
答案 0 :(得分:10)
根据对该问题的评论:
@BalusC我同意你所说的,最好在UI中进行格式化。所以我在jsf页面中添加了以下内容。
managedBean中的<p:inputText value="#{vacationschedule.convertTime(vacationschedule.selectedRow.startDate)}">
和
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:无法将给定的对象格式化为日期
您正在寻找错误方向的解决方案。人为目标格式化必须在视图(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 Users Guide以了解所有可用属性。
答案 1 :(得分:2)
使用您创建的相同SimpleDateFormat
对象
df.parse(yourDateString);
答案 2 :(得分:0)
我希望我的代码可以帮助您
public String dateToString(Date date, SimpleDateFormat formatter) {
return formatter.format(date);
}
public Date stringToDate(String date, SimpleDateFormat formatter) {
try {
return formatter.parse(date);
} catch (ParseException e) {
//Catching exception
}
return null;
}
答案 3 :(得分:0)
这对我有用:
<p:calendar value="#{calTestBean.dateStr}" pattern="MM/dd/yyyy">
<f:convertDateTime pattern="MM/dd/yyyy"/>
</p:calendar>