Faces-config.xml の java.util.Date クラスに登録した DateTimeConverter を拡張するカスタム コンバーターがあります。基本的に、新しいコンバーターが行うことは、適切な jspf で表示できるように、より説明的なメッセージを追加して現在のコンテキストに渡すことだけです。
私がテストしている画面上の 1 つの日付フィールドでは、すべて正常に動作します。他の 2 つの場合、私の getAsObject() メソッドは呼び出されません。ただし、デバッグ用に h:messages タグを追加しましたが、他の 2 つの日付フィールドは変換エラーをスローしているため、まだどこかで変換を試みています。
3 つのフィールドに違いはありません。それらはすべて同じスタイルクラスを使用し、それぞれが java.util.Date によってサポートされています。2 番目の 2 つがデフォルトのコンバーターを使用しているためだと思いますが、その理由はわかりません。フィールドはすべて動的に作成されるため、jsp にタグを追加することはできませんが、コンポーネントが作成されるユーティリティ クラスでコンバーターを明示的に設定しようとしましたが、同じ問題がありました。
私が探すべきアイデアはありますか?小さくて当たり前のような気がしますが、見えていません。
編集: 簡単にコピーして貼り付けることができる部分は、それほど多くありません。jsp には、dataTable があります (これは機能します)。
<h:dataTable id="myTableID" binding="#{myBackingbean.myTable}" value="#{myBackingbean.myInfoArray}"
rowClasses="#{myBackingbean.myRowClasses}" columnClasses="field-first,field-last" var="varDetails" border="0" cellpadding="2" cellspacing="0"
headerClass="sub-heading ui-widget-header" width="98%">
</h:dataTable>
myTable は HtmlDataTable であり、myInfoArray はクラスの 1 つのリンク リストです。
他の 2 つ:
<h:dataTable id="myTableID2" binding="#{myBackingbean.myTable2}" value="#myBackingbean.myInfoArray2}"
rowClasses="#{myBackingbean.myRowClasses2}" columnClasses="field-first,field-last" var="varDetails2" border="0" cellpadding="2" cellspacing="0"
headerClass="sub-heading" styleClass="" width="100%">
</h:dataTable>
私のユーティリティクラスで:
HtmlInputText dateInput = new HtmlInputText();
dateInput.setId("dynamic_Date");
ValueBinding binding_value_3_3 = getApplication().createValueBinding("#{XXXXXXXX.dtValue}");
dateInput.setValueBinding("value", binding_value_3_3);
ValueBinding bindingCol_3_4 = getApplication().createValueBinding("#{XXXXXXXX.date}");
dateInput.setValueBinding("rendered", bindingCol_3_4);
ValueBinding bindingCol_date = getApplication().createValueBinding("#{XXXXXXXX.disabled}");
dateInput.setValueBinding("disabled", bindingCol_date);
HtmlInputText dateTimeInput = new HtmlInputText();
dateTimeInput.setId("dynamic_DateTime");
ValueBinding binding_value_11_3 = getApplication().createValueBinding("#{XXXXXXXX.strValue}");
dateTimeInput.setValueBinding("value", binding_value_11_3);
ValueBinding bindingCol_11_4 = getApplication().createValueBinding("#{XXXXXXXX.dateTime}");
dateTimeInput.setValueBinding("rendered", bindingCol_11_4);
ValueBinding bindingCol_dateTimeInput = getApplication().createValueBinding("#{XXXXXXXX.disabled}");
dateTimeInput.setValueBinding("disabled", bindingCol_dateTimeInput);
column1.getChildren().add(dateInput);
column1.getChildren().add(dateTimeInput);
XXXXXXXX は varDetails または varDetails2 です。