I stumbled on following problem:
I'm trying to get results from a postgres database (eclipselink persistence) into p:datatable and calling several rows within p:dialog.
The issue is that p:dialog stays empty.
So I logged the getter and setter methods of the affected selectedVar in my JavaBean and found out that the gettermethods are called BEFORE the setter method is called.
XHTML:
Code: Select all
<h:form>
<p:dataTable var="obj" value="#{mybean.objs}"
rowSelectListener="#{mybean.onSelectobj}"
selection="#{mybean.selectedobj}" selectionMode="single"
onselectComplete="objDialog.show()">
...
...
...
</p:dataTable>
</h:form>
<p:dialog header="#{mybean.selectedobj.value1} || Details" widgetVar="userDialog"
width="360" resizable="false" closable="true"
showEffect="fade" hideEffect="fade">
<h:form>
...
Code: Select all
...
...
...
@SuppressWarnings("unchecked")
public List<myObject> getObjs() {
factory = Persistence.createEntityManagerFactory("xxx");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Query q = em.createQuery("select o from ObjTable o");
objs = q.getResultList();
em.close();
return objs;
}
public myObject getSelectedobj() {
if(this.selectedobj!=null) {
logger.log(Level.INFO, "Info - getSelectedobj aufgerufen - " + selectedobj.getValue1());
} else {
logger.log(Level.INFO, "Info - getSelectedobj aufgerufen");
}
return selectedobj;
}
...
...
...
public void onSelectobj(SelectEvent event) {
logger.log(Level.INFO, "Info - onSelectobj aufgerufen - " + ((myObject) event.getObject()).getValue1());
setSelectedobj((myObject) event.getObject()).getValue1());
}
Well, I googled a possible solution (would it be a solution ?):
- change scope to view and make your bean serializable
In fact, I just can't do that because of JPA persistence.
So, what can I do ?
Thx in advance
David