當我訪問從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
使用JPA管理日期值(意味着它是代理)工作正常時,它是直接從EL使用喜歡這樣的:
'<h:outputLabel value="MyDateValue" for="input"/>
'<h:inputText id="inputDate" value="#{bean.myDate}"/>
但是,它會導致試圖與複合材料部件 使用它的時候麻煩,還給下面的轉換器的異常,因此可以」 t更新模型...
的(簡化的)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管理日期(或其他代理實體)在複合組件?
你似乎暗示它在不使用複合組件時會起作用(所以當直接在頁面中使用組件時,「常用方法」)。這是真的? – BalusC 2011-05-30 12:44:21
@BalusC對。使用它「直接」按預期工作。我發現MyFaces Resolver可以按照https://cwiki.apache.org/MYFACES/elresolver-ordering.html排序,並且對它起了一點作用,但沒有成功。使用不同的ELFactoryImpl(JBoss El 2.0.1)可以實現JPA代理日期的訣竅,儘管在WebSphere 8中註冊它非常棘手。但是方法調用不再適用於該el ... – jonnie119 2011-05-30 14:15:22
我從來沒有之前看過這個問題,但我也沒有使用MyFaces。你有沒有機會嘗試莫哈拉而不是MyFaces,儘管它只是排除其中的一個。 – BalusC 2011-05-30 14:17:08