当我从 JSF 访问 JPA 托管日期值时,它返回 javax.faces.component.UdateModelException 说
'Cannot convert 01.01.10 00:00 of type class java.util.Date to class org.apache.openjpa.util.java$util$Date$proxy
当直接从 EL 中使用时,使用 JPA 管理的日期值(这意味着它是代理的)可以正常工作,如下所示:
'<h:outputLabel value="MyDateValue" for="input"/>
'<h:inputText id="inputDate" value="#{bean.myDate}"/>
但是,在尝试将其与复合组件一起使用时会导致麻烦,并返回以下转换器异常,因此无法更新模型......
(简化的)JSF 复合组件 inputDate.xhtml
<head>
<title>A date input field</title>
</head>
<composite:interface>
<composite:attribute name="dateValue"/>
</composite:interface>
<composite:implementation>
<h:outputLabel value="MyDateValue" for="input"/>
<h:inputText id="input" value="#{cc.attrs.dateValue}"/>
</composite:implementation>
假设:当从组合内部访问值时,OpenJPA 中的代理替换的处理方式似乎有所不同。我的猜测是 EL 解析器在将对象值传递给组合时以不同方式处理对对象值的调用。将它传递给组合意味着它首先在组合中被访问,这为时已晚并且没有完成所需的代理替换(因此转换器异常)
因此,我尝试更改 MyFaces 的表达式语言,但它在 Websphere 中不起作用,即使我最后将类加载更改为父级并在 lib 文件夹中从 glassfish 提供了 el-impl 和 el-api 并插入了必要的上下文-MyFaces 的参数
你们如何在复合组件中使用 JPA 管理的日期(或其他代理实体)???