2013-04-22 80 views
0

我提供的数据来自数据库视图。一列包含逗号分隔日期列表,因为日期来自一对多表连接。所以现在我坚持解析和格式化我的jsf facelet。Parsed String of Dates not formatting 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正常工作时,我就不需要被解析单个值工作。

+0

貌似'date'变量被解释为'字符串'。你可以在你的JSF管理bean上有一个'List ',并将它绑定到你的''(这会更容易处理)。 – 2013-04-22 21:39:53

+0

我的支持bean只是回顾一个字符串列表。然后我通过列号引用,即#{c [41]}我编辑了我的帖子以阐明 – jeff 2013-04-22 21:58:56

回答

2

从在给定的图案的java.util.Date实例String期间呈现HTML输出和来自String在给定的模式以一个java.util.Date实例的<f:convertDateTime>转换处理表单提交期间。它不会将模式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> 
+0

感谢BalusC。我会考虑改进我的模型。最初客户只想要绘制数据和图表的汇总数据,所以我只用了一个数组。但是现在他们需要支持数据,我只是用我原来的字符串appraoch数组。 IT部门将数据作为视图提供给我,他们将所有表格连接在一起,并在一个字段中填入一个或多个逗号分隔的值,并让我解析它。我必须离开这家公司! – jeff 2013-04-23 12:57:56