日付フィールドのコンバーターとメッセージタグを入力しないようにするために、カスタムjsf2コンポーネントを作成しようとしています。テンプレートを使用してIcefaces1.xでこれを行いました。しかし、JSF 2では、複合コンポーネントを使用せざるを得ませんでした。それは私が望んでいたほどうまくいっていません。
複合コンポーネントが正常に作成されました。
<composite:interface>
<composite:attribute name="style" />
<composite:attribute name="partialSubmit" />
<composite:attribute name="rendered" />
<composite:attribute name="immediate" />
<composite:attribute name="value" required="true" />
<composite:attribute name="pattern" required="true" />
</composite:interface>
<composite:implementation>
<ice:panelGroup rendered="#{cc.attrs.rendered}">
<ice:selectInputDate value="#{cc.attrs.value}"
style="#{cc.attrs.style}" id="input" renderAsPopup="true"
partialSubmit="#{cc.attrs.partialSubmit }"
immediate="#{cc.attrs.immediate }">
</ice:selectInputDate>
<ice:message for="input" style="color: red; display: block"></ice:message>
</ice:panelGroup>
</composite:implementation>
プロパティがnullの場合、コンポーネントは期待どおりに動作します。ただし、データベースからデータをロードすると、java.sql.Dateインスタンスが取得されます(オブジェクトがjava.util.dateを使用しているにもかかわらず、前者は後者を拡張します)、次の例外が発生します。
java.lang.IllegalArgumentException:タイプクラスjava.util.Dateの03/03/1120:00をクラスjava.sql.Dateに変換できません
奇妙なことに、複合コンポーネントの外部でice:selectInputDateを使用しても、そのエラーは発生しません。何か案は?