0

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 です。

4

1 に答える 1

0

問題が何であったかわかりません。結局、新しいプロジェクトを作成しただけで、それが解決されました。

于 2013-05-16T19:23:50.450 に答える