解析的日期字符串未在facelet中正确格式化

时间:2013-04-22 21:36:46

标签: jsf facelets

我提供的数据来自数据库视图。一列包含逗号分隔日期的列表,因为日期来自一对多表连接。所以现在我在我的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正常工作解析。

1 个答案:

答案 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>