提供的数据来自数据库视图。其中一列包含以逗号分隔的日期列表,因为这些日期来自一对多表连接。所以现在我卡住了解析和格式化在我的jsf facet。
<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在我处理单个不需要解析的值时正常工作。
<f:convertDateTime>
在呈现HTML输出时从java.util.Date
实例转换为给定模式的String
,在处理表单提交时从String
实例转换为给定模式的java.util.Date
。它不会将模式X中的String
转换为模式y中的String
。
你的问题的根本原因是有一个相当差的数据模型与所有的字符串化。也许您一直使用ResultSet#getString()
而不是ResultSet#getObject()
。此外,一对多关系不应该表示为逗号分隔的字符串,而应该表示为集合或数组属性。
。这个模型表示一条记录:
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>