我正在尝试创建一个自定义 jsf2 组件,以避免为我的日期字段输入转换器和消息标签。我已经使用模板在 Icefaces 1.x 中完成了这项工作。但是,在 JSF 2 中,我不得不使用复合组件。这并不像我希望的那样顺利。
复合组件已成功创建:
<composite:interface>
<composite:attribute name="style" />
<composite:attribute name="partialSubmit" />
<composite:attribute name="rendered" />
<composite:attribute name="immediate" />
<composite:attribute name="value" required="true" />
<composite:attribute name="pattern" required="true" />
</composite:interface>
<composite:implementation>
<ice:panelGroup rendered="#{cc.attrs.rendered}">
<ice:selectInputDate value="#{cc.attrs.value}"
style="#{cc.attrs.style}" id="input" renderAsPopup="true"
partialSubmit="#{cc.attrs.partialSubmit }"
immediate="#{cc.attrs.immediate }">
</ice:selectInputDate>
<ice:message for="input" style="color: red; display: block"></ice:message>
</ice:panelGroup>
</composite:implementation>
当属性为 null 时,组件按预期运行。但是,当我从数据库加载数据时,我得到一个 java.sql.Date 实例(尽管我的对象使用 java.util.date - 前者扩展了后者),我得到了这个异常:
java.lang.IllegalArgumentException:无法将 java.util.Date 类型的 03/03/11 20:00 转换为 java.sql.Date 类
奇怪的是,如果我在复合组件之外使用 ice:selectInputDate,我不会收到该错误。有任何想法吗?