DataModelSelection not injected
salski22 Sep 2, 2009 2:32 PMI'm new with seam :)
I can list objects with @DataModel when search method is called. I have edit button next to each object returned in dataTable
list.xhtml
<ui:define name="body"> <h:messages styleClass="message"/> <h:form id="edit"> <rich:panel> <f:facet name="header">Edit</f:facet> <h:dataTable value="#{eventSearchMatches}" var="e"> <h:column> <p><h:outputText value="#{e.startDate}" /></p> <p><h:outputText value="#{e.description}" /></p> </h:column> <h:column> <s:button value="Edit" action="#{eventList.editEvent}" /> </h:column> </h:dataTable> </rich:panel> </h:form> </ui:define> </ui:composition>
and my class
@Stateful @Name("eventList") public class EventBean implements IEventBean { @PersistenceContext(unitName="polskirajweb") private EntityManager em; @In(value="event", create=true) @Out(value="event", required=false) private EventEntity mActiveEvent; private String searchField; @DataModel(value ="eventSearchMatches") List<EventEntity> mEventMatches; @DataModelSelection(value ="eventSearchMatches") private EventEntity mSelEvents; public EventEntity getMActiveEvent() { return mActiveEvent; } public void setMActiveEvent(EventEntity activeEvent) { mActiveEvent = activeEvent; } public String newEvent() { newEvent(getMActiveEvent()); return "success"; } public void newEvent(EventEntity g) { try { if(em.find(EventEntity.class, new Long(g.getEventId())) != null) { em.merge(g); } else em.persist(g); } catch (Exception e) { e.printStackTrace(); } } public String getSearchField() { return searchField; } public void setSearchField(String searchField) { this.searchField = searchField; } public String search() { String sField = "%" + getSearchField().toUpperCase() + "%"; try { Query q = em.createQuery("select e from EventEntity e where upper(e.city) like :searchField" + " or upper(e.sidecity) like :searchField or upper(e.place) like :searchField" + " or upper(e.description) like :searchField").setParameter("searchField", sField); mEventMatches = q.getResultList(); } catch (Exception e) { e.printStackTrace(); } mSelEvents = null; return "success"; } public String editEvent() { setMActiveEvent(mSelEvents); return "success"; } @Remove @Destroy public void destroy() {} }
I tried to debug and I see that mSelEvents i null all the time, so it looks like selected object from @DataModel is not injected into @DataModelSelection, am I right??
I want to edit variables from list.xhtml but when I enter new variables it will persist new object, it will not be updated.
Why this is not working, what I'm doing wrong???
Please help