JSF自定义转换器并不总是使用

时间:2013-05-15 21:00:55

标签: java jsf converter jsf-1.2

我有一个自定义转换器,它扩展了DateTimeConverter,我在faces-config.xml中注册了java.util.Date类。基本上所有新转换器正在做的是添加更具描述性的消息并将其传递给当前上下文,以便它可以显示在适当的jspf中。

对于我正在测试的屏幕上的一个日期字段,一切正常;对于另外两个,我的getAsObject()方法永远不会被调用。但是,我添加了一个用于调试的h:messages标记,而另外两个日期字段正在抛出转换错误,所以它们仍在尝试转换。

我可以在三个领域之间找到差异;它们都使用相同的样式,每个都由java.util.Date支持。我认为发生的事情是后两个使用默认转换器,但我不确定为什么。这些字段都是动态创建的,因此我无法在jsp中添加标记,但我确实尝试在创建组件的实用程序类中显式设置转换器,但是遇到了同样的问题。

我应该寻找什么想法?我觉得它很小而且显而易见,但我没有看到它。

编辑: 我可以轻松复制+粘贴的部分真的没那么多。在jsp中,有一个dataTable(on on works):

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

1 个答案:

答案 0 :(得分:0)

我不确定是什么问题;我最终只是创建了一个新项目,清理了它。