2013-04-22 81 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