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



提供的数据来自数据库视图。其中一列包含以逗号分隔的日期列表,因为这些日期来自一对多表连接。所以现在我卡住了解析和格式化在我的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>

相关内容

  • 没有找到相关文章

最新更新