我有一个自定义转换器,它扩展了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代码,以便重现问题并提供解决方案。 –