turn on the parameterinterceptor logging and make sure as mentioned that 1) the values you expect for each child are being sent to the server (id and name) 2) the parameter names are correct for setting each child i had some issues getting lists of items to be updated by form submission alone. for example does your parent object have a getValues method taking an index value getParent().getValues(1).setId(1) getParent().getValues(1).setName("bob") would be called by parameterinterceptor
---------------------------------------- > From: brgrandj...@live.fr > To: user@struts.apache.org > Subject: RE: CRUD with a OneToMany association under Struts 2 / Hibernate 3 > Date: Thu, 1 Apr 2010 12:16:09 +0200 > > > Dear René > > > > I changed my jsp page so as to integrate the following block: > > > > > > > > > > > which generates the following html code: > > > > > > > > > > > > > > > > > > > > > > > > > > > I can display my complete Child Set but I got the same result after updating: > my Child Set is empty. > > > > Is that necessary to modify my ParentAction as well? If yes what to do? > > > > public class ParentAction extends ActionSupport implements ModelDriven { > > private static final long serialVersionUID = -2662966220408285700L; > private Parent cl = new Parent(); > private List clList = new ArrayList(); > private ParentDAO clDAO = new ParentDAOImpl(); > > @Override > public Parent getModel() { > return cl; > } > > public String saveOrUpdate() > { // cl.values is empty here!! > clDAO.saveOrUpdateParent(cl); > return SUCCESS; > } > > public String save() > { > clDAO.saveParent(cl); > return SUCCESS; > } > > public String list() > { > clList = clDAO.listParent(); > return SUCCESS; > } > > public String delete() > { > HttpServletRequest request = (HttpServletRequest) > ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); > clDAO.deleteParent(Long.parseLong(request.getParameter("id"))); > return SUCCESS; > } > > public String edit() > { // cl.values contains some valid Child elements here!! > HttpServletRequest request = (HttpServletRequest) > ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); > cl = clDAO.listParentById(Long.parseLong(request.getParameter("id"))); > } > return SUCCESS; > } > > public Parent getParent() { > return cl; > } > > public void setParent(Parent cl) { > this.cl = cl; > } > > public List getParentList() { > return clList; > } > > public void setParentList(List clList) { > this.clList = clList; > } > } > > > >> Date: Thu, 1 Apr 2010 11:30:23 +0200 >> From: gie...@it-neering.net >> To: user@struts.apache.org >> Subject: Re: CRUD with a OneToMany association under Struts 2 / Hibernate 3 >> >> Given the model you presented in the first post, your problem seems to >> be that the posted values have not the correct name for the children's >> form fields. The parameters names you would need are >> >> id >> name >> values[0].id >> values[0].name >> values[1].id >> values[2].name >> ... >> >> for the parameters interceptor to work properly when applying the posted >> values. >> >> See here for more details: >> http://struts.apache.org/2.1.8/docs/tabular-inputs.html >> >> - René >> >> bruno grandjean schrieb: >>> Dear Rene, >>> >>> Thks a lot for replying to me because I am feeling a little bit alone with >>> my CRUD ;-). In fact I am trying to build a dynamic MetaCrud. >>> My pb is simple: in the same jsp page I would like to update a Parent >>> object >>> and its Childs (values): >>> >>> >>> >>>>>> name="name" label="Nom" /> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> From an existing Parent object with many Childs objects I can easily modify >>> parent.name for instance but the collection of Child objects (values) is >>> always empty in the ParentAction (saveOrUpdate() method) after submitting. >>> However I can display each values[i].name in the jsp page with the correct >>> value. >>> So it is not an issue with Hibernate but with the jsp or ModelDriven >>> interface I don't know..Do you have any idea? >>> Basically I was not able to find a struts or spring documentation about >>> CRUD >>> & association between two entities on the same jsp page. >>> best regards >>> bruno >>> >>> >>> >>> -------------------------------------------------- >>> From: "Rene Gielen" >>> Sent: Wednesday, March 31, 2010 7:12 PM >>> To: "Struts Users Mailing List" >>> Subject: Re: CRUD with a OneToMany association under Struts 2 / Hibernate 3 >>> >>>> I'm not sure if I understand what your actual question is, nor whether >>>> it is particularly Struts 2 related (rather than just Hibernate) - but >>>> you might want to have a look in the CRUD demo section of the Struts 2 >>>> showcase application. Maybe you will also find this demo useful: >>>> http://github.com/rgielen/struts2crudevolutiondemo >>>> >>>> - René >>>> >>>> bruno grandjean schrieb: >>>>> Hi >>>>> >>>>> I am trying to implement a simple CRUD with a OneToMany association >>>>> under Struts 2 / Hibernate 3. >>>>> I have two entities Parent and Child: >>>>> >>>>> @Entity >>>>> @Table(name="PARENT") >>>>> public class Parent { >>>>> private Long id; >>>>> private Set values = new HashSet(); >>>>> .. >>>>> @Entity >>>>> @Table(name="CHILD") >>>>> public class Child { >>>>> private Long id; >>>>> private String name; >>>>> .. >>>>> >>>>> I can easily create, delete Parent or read the Child Set (values) but >>>>> it is impossible to update Child Set. >>>>> The jsp page (see below) reinit the values Set, no record after >>>>> updating! >>>>> Could u explain to me what's wrong? >>>>> >>>>> here are my code: >>>>> >>>>> @Entity >>>>> @Table(name="PARENT") >>>>> public class Parent { >>>>> private Long id; >>>>> private Set values = new HashSet(); >>>>> @Id >>>>> @GeneratedValue >>>>> @Column(name="PARENT_ID") >>>>> public Long getId() { >>>>> return id; >>>>> } >>>>> public void setId(Long id) { >>>>> this.id = id; >>>>> } >>>>> @ManyToMany(fetch = FetchType.EAGER) >>>>> @JoinTable(name = "PARENT_CHILD", joinColumns = { @JoinColumn(name = >>>>> "PARENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "CHILD_ID") }) >>>>> public Set getValues() { >>>>> return values; >>>>> } >>>>> public void setValues(Set lst) { >>>>> values = lst; >>>>> } >>>>> } >>>>> >>>>> @Entity >>>>> @Table(name="CHILD") >>>>> public class Child { >>>>> private Long id; >>>>> private String name; >>>>> @Id >>>>> @GeneratedValue >>>>> @Column(name="CHILD_ID") >>>>> public Long getId() { >>>>> return id; >>>>> } >>>>> public void setId(Long id) { >>>>> this.id = id; >>>>> } >>>>> @Column(name="NAME") >>>>> public String getName() { >>>>> return name; >>>>> } >>>>> public void setName(String val) { >>>>> name = val; >>>>> } >>>>> } >>>>> >>>>> public interface ParentDAO { >>>>> public void saveOrUpdateParent(Parent cl); >>>>> public void saveParent(Parent cl); >>>>> public List listParent(); >>>>> public Parent listParentById(Long clId); >>>>> public void deleteParent(Long clId); >>>>> } >>>>> >>>>> public class ParentDAOImpl implements ParentDAO { >>>>> @SessionTarget >>>>> Session session; >>>>> @TransactionTarget >>>>> Transaction transaction; >>>>> >>>>> @Override >>>>> public void saveOrUpdateParent(Parent cl) { >>>>> try { >>>>> session.saveOrUpdate(cl); >>>>> } catch (Exception e) { >>>>> transaction.rollback(); >>>>> e.printStackTrace(); >>>>> } >>>>> } >>>>> >>>>> @Override >>>>> public void saveParent(Parent cl) { >>>>> try { >>>>> session.save(cl); >>>>> } catch (Exception e) { >>>>> transaction.rollback(); >>>>> e.printStackTrace(); >>>>> } >>>>> } >>>>> >>>>> @Override >>>>> public void deleteParent(Long clId) { >>>>> try { >>>>> Parent cl = (Parent) session.get(Parent.class, clId); >>>>> session.delete(cl); >>>>> } catch (Exception e) { >>>>> transaction.rollback(); >>>>> e.printStackTrace(); >>>>> } >>>>> } >>>>> >>>>> @SuppressWarnings("unchecked") >>>>> @Override >>>>> public List listParent() { >>>>> List courses = null; >>>>> try { >>>>> courses = session.createQuery("from Parent").list(); >>>>> } catch (Exception e) { >>>>> e.printStackTrace(); >>>>> } >>>>> return courses; >>>>> } >>>>> >>>>> @Override >>>>> public Parent listParentById(Long clId) { >>>>> Parent cl = null; >>>>> try { >>>>> cl = (Parent) session.get(Parent.class, clId); >>>>> } catch (Exception e) { >>>>> e.printStackTrace(); >>>>> } >>>>> return cl; >>>>> } >>>>> } >>>>> >>>>> public class ParentAction extends ActionSupport implements >>>>> ModelDriven { >>>>> >>>>> private static final long serialVersionUID = -2662966220408285700L; >>>>> private Parent cl = new Parent(); >>>>> private List clList = new ArrayList(); >>>>> private ParentDAO clDAO = new ParentDAOImpl(); >>>>> >>>>> @Override >>>>> public Parent getModel() { >>>>> return cl; >>>>> } >>>>> >>>>> public String saveOrUpdate() >>>>> { >>>>> clDAO.saveOrUpdateParent(cl); >>>>> return SUCCESS; >>>>> } >>>>> >>>>> public String save() >>>>> { >>>>> clDAO.saveParent(cl); >>>>> return SUCCESS; >>>>> } >>>>> >>>>> public String list() >>>>> { >>>>> clList = clDAO.listParent(); >>>>> return SUCCESS; >>>>> } >>>>> >>>>> public String delete() >>>>> { >>>>> HttpServletRequest request = (HttpServletRequest) >>>>> ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); >>>>> clDAO.deleteParent(Long.parseLong(request.getParameter("id"))); >>>>> return SUCCESS; >>>>> } >>>>> >>>>> public String edit() >>>>> { >>>>> HttpServletRequest request = (HttpServletRequest) >>>>> ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); >>>>> cl = clDAO.listParentById(Long.parseLong(request.getParameter("id"))); >>>>> return SUCCESS; >>>>> } >>>>> >>>>> public Parent getParent() { >>>>> return cl; >>>>> } >>>>> >>>>> public void setParent(Parent cl) { >>>>> this.cl = cl; >>>>> } >>>>> >>>>> public List getParentList() { >>>>> return clList; >>>>> } >>>>> >>>>> public void setParentList(List clList) { >>>>> this.clList = clList; >>>>> } >>>>> } >>>>> >>>>> and finally the jsp page: >>>>> >>>>> >>>>>>>>>> "http://www.w3.org/TR/html4/loose.dtd"> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Child(s) >>>>> >>>>> >>>>>>>>>> class="oddeven"> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Edit >>>>> >>>>> >>>>> Delete >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> -- >>>> René Gielen >>>> IT-Neering.net >>>> Saarstrasse 100, 52062 Aachen, Germany >>>> Tel: +49-(0)241-4010770 >>>> Fax: +49-(0)241-4010771 >>>> Cel: +49-(0)163-2844164 >>>> http://twitter.com/rgielen >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>>> For additional commands, e-mail: user-h...@struts.apache.org >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>> For additional commands, e-mail: user-h...@struts.apache.org >>> >> >> -- >> René Gielen >> IT-Neering.net >> Saarstrasse 100, 52062 Aachen, Germany >> Tel: +49-(0)241-4010770 >> Fax: +49-(0)241-4010771 >> Cel: +49-(0)163-2844164 >> http://twitter.com/rgielen >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >> For additional commands, e-mail: user-h...@struts.apache.org >> > > _________________________________________________________________ > Découvrez comment SURFER DISCRETEMENT sur un site de rencontres ! > http://clk.atdmt.com/FRM/go/206608211/direct/01/ > _________________________________________________________________ Do you have a story that started on Hotmail? Tell us now http://clk.atdmt.com/UKM/go/195013117/direct/01/ --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org