我有一個自定義轉換器,它擴展了DateTimeConverter,我已經在faces-config.xml中註冊了java.util.Date類。基本上,新轉換器所做的就是添加更多描述性消息並將其傳遞到當前上下文,以便它可以顯示在適當的jspf中。JSF自定義轉換器並不總是使用
對於屏幕上的一個日期字段,我正在測試,一切正常;對於另外兩個,我的getAsObject()方法永遠不會被調用。但是,我添加了一個用於調試的h:messages標記,另外兩個日期字段引發了轉換錯誤,所以它們仍然試圖在某處進行轉換。
我可以找到三個領域之間沒有區別;它們都使用相同的styleclasses,並且每個都由java.util.Date支持。我認爲發生的是第二個使用默認轉換器,但我不知道爲什麼。這些字段都是動態創建的,所以我不能在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是我們班的一個鏈表。
另外兩個:
<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。
至少發佈JSF代碼,以便重現問題並提供解決方案。 –