0

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

4

1 回答 1

2

在呈现 HTML 输出期间<f:convertDateTime>java.util.Date实例转换为给定模式,在处理表单提交期间从给定模式转换为实例。它不会在模式 X 中转换为模式 Y 中的另一个。StringStringjava.util.DateStringString

问题的根本原因在于数据模型相当差,所有内容都被字符串化了。也许你用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>
于 2013-04-23T01:01:38.620 回答