2

ではなく、コンポーネントをフィールドに<ice:selectInputDate>マップする方法を知っている人はいますか?java.util.Calendarjava.util.Date

私はIceFacesバージョン 1.8.2からコンポーネントを使用しています<ice:selectInputDate>。このコンポーネントは、プロパティにバインドする必要がありますjava.util.Date。たとえばvalue="#{bean.myDate}"myDateフィールドのタイプは である必要がありますjava.util.Date。しかし、日付フィールドがタイプである必要がありますjava.util.Calendar

私の試用版: 標準コンバーターまたはカスタム コンバーターを使用しようとしました。

  1. 標準的なもの: <f:convertDateTime pattern="dd/MM/yyyy" /> GUI で正しい値をフォーマットしますがbean.myDate、タイプのプロパティに設定すると、Calendar次のエラー メッセージが表示されます。

    [5/3/10 12:09:18:398 EEST] 00000021 ライフサイクル I 警告: FacesMessage はキューに入れられましたが、表示されていない可能性があります。sourceId=j_id12:j_id189:myDate[重大度=(エラー 2)、概要=(/WEB-INF/xhtml............file.xhtml @507,51 値="#{bean. myDate}": クラス 'bean' のプロパティ 'myDate' を値 '5/11/10 3:00 AM' に設定できません。)、detail=(/WEB-INF/xhtml........ file.xhtml @507,51 value="#{bean.myDate}": クラス '...bean...' のプロパティ 'myDate' を値 '5/11/10 3:00 AM' に設定できません.)]

  2. カスタム 1:<f:converter converterId="c2d"/>

    • getAsObject -java.util.Calendar送信された からオブジェクトを返しますString
    • getAsString - を受け取り、フォーマットされたObjectものを返します。String

注: このメソッドはハッキングされたので、メソッドjava.util.Calendarを補完するものと期待するのではなくgetAsObject. 代わりに、ハッキングされたメソッドは、 ( によって) パラメータとして提供される をgetAsString期待し、フォーマットされたを返します。java.util.Dateice:selectInputDateString

しかし、それでもエラー メッセージが表示されます。

[5/3/10 12:55:34:299 EEST] 0000001f D2DFaceletVie E com.icesoft.faces.facelets.D2DFaceletViewHandler renderResponse renderResponse の問題: java.util.GregorianCalendar は java.util.Date java.lang.ClassCastException と互換性がありません: java.util.GregorianCalendar は、com.icesoft.faces.component.selectinputdate.SelectInputDate.getTextToRender(SelectInputDate.java:252) で java.util.Date と互換性がありません

どんなヒントもとても役に立ちます!ありがとう、ミハエラ

4

2 に答える 2

4

Calendarを返す/取得する別のゲッター/セッターでプロパティをラップしますDate

private Calendar calendar;

public Date getCalendarDate() {
    return (calendar != null) ? calendar.getTime() : null;
}

public void setCalendarDate(Date date) {
    if (calendar == null) {
        calendar = Calendar.getInstance();
        calendar.clear(); // Avoid timezone issues.
    }
    calendar.setTime(date);
}

ここでは <-- >変換が必要ですが、これは<-->変換のみを行うため、 JSF コンバーターは機能しません。私は IceFaces を使用していませんが、特定のコンポーネントが特定のフォーマット パターンで日付文字列を受け入れる可能性もあります。それを見つけてから、この文字列形式パターンに従って<-->を変換するために、それに応じて covnerter を記述する必要があります。はこれに役立ちます。ObjectStringObjectDateCalendarStringjava.text.SimpleDateFormat

于 2010-05-04T15:48:19.330 に答える
3

BalusC が提案するようにするか、単に を設定しvalue="#{yourBean.yourCalendar.time}ます。

于 2010-05-05T16:21:30.373 に答える