0

私が提供するデータは、データベース ビューから取得されます。日付は 1 対多のテーブル結合から取得されるため、1 つの列にはコンマ区切りの日付のリストが含まれます。だから今、私は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;
 }

f: convertDateTimeは、解析する30-OCT-11必要11/30/2011 のない単一の値を操作するときに適切に機能します。

4

1 に答える 1

2

は、 HTML 出力のレンダリング中にインスタンスから特定<f:convertDateTime>のパターンに変換し、フォーム送信の処理中に特定のパターンからインスタンスに変換します。パターン X からパターン Yへの変換は行われません。java.util.DateStringStringjava.util.DateStringString

問題の根本的な原因は、すべてが文字列化されたかなり貧弱なデータ モデルを持つことです。ResultSet#getString()の代わりにずっと使っていたのかもしれませんResultSet#getObject()。また、1 対多の関係は、コンマ区切りの文字列としてではなく、コレクションまたは配列のプロパティとして表す必要があります。

たとえば、単一のレコードを表すこのモデル:

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 に答える