提供给我的数据来自数据库视图。一列包含逗号分隔的日期列表,因为日期来自一对多的表连接。所以现在我不得不在我的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工作正常。
发布于 2013-04-23 09:01:39
在呈现HTML输出期间,<f:convertDateTime>从给定模式的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>https://stackoverflow.com/questions/16157158
复制相似问题