Когда я получаю доступ к значению управляемой даты JPA из JSF, оно возвращается с 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}"/>
Тем не менее, это вызывает проблемы при попытке использовать его с составными компонентами
и возвращает следующее исключение конвертера и, следовательно, не может обновить модель ...
(упрощенный) составной компонент 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-resolver по-разному обрабатывает вызовы значений объекта, когда они передаются в композиты. Передача его в композиты означает, что к нему сначала осуществляется доступ в композите, что слишком поздно, и необходимая замена прокси не выполнена (таким образом, исключение конвертера)
Итак, я попытался изменить язык выражений для MyFaces, но он не работал в Websphere, хотя я изменил загрузку класса на родительский последний и предоставил el-impl и el-api из glassfish в папке lib и вставил необходимый контекст-параметр для MyFaces
Как вы, ребята, используете управляемые JPA даты (или другие прокси-объекты) в составных компонентах ???