我提供的数据来自数据库视图。一列包含逗号分隔日期的列表,因为日期来自一对多表连接。所以现在我在我的jsf facelet中解析和格式化了。
<ui:repeat value="#{chartController.reportData}" var="c" >
<tr>
...other columns
<td>
<ui:repeat value="#{fn:split(c[41], ',')}" var="date">
<h:outputText value="#{date}" >
<f:convertDateTime pattern="MM/dd/yyyy" />
</h:outputText><br />
</ui:repeat>
</td>
</tr>
</ui:repeat>
public List<String> getReportData() {
return reportData;
}
但是,日期格式不正确,它显示为30-OCT-11
但我需要它11/30/2011
当我处理一个不需要的单个值时,f:convertDateTime正常工作解析。
答案 0 :(得分:2)
<f:convertDateTime>
在呈现HTML输出期间以给定模式从java.util.Date
实例转换为String
,并在给定模式下从String
转换为java.util.Date
实例处理表单提交。它不会将模式X中的String
转换为模式Y中的另一个String
。
问题的根本原因在于数据模型相当差,所有字符串都是如此。也许您一直使用ResultSet#getString()
而不是ResultSet#getObject()
。此外,一对多关系不应表示为逗号分隔字符串,而应表示为集合或数组属性。
E.g。此模型代表单个记录:
public class ReportDataItem {
private List<Date> dates;
// ...
}
引用如下:
public List<ReportDataItem> getReportData() {
return reportData;
}
并提供如下:
<ui:repeat value="#{chartController.reportData}" var="reportDataItem" >
...other columns
<tr>
<td>
<ui:repeat value="#{reportDataItem.dates}" var="date">
<h:outputText value="#{date}">
<f:convertDateTime pattern="MM/dd/yyyy" />
</h:outputText>
<br />
</ui:repeat>
</td>
</tr>
</ui:repeat>