In all cases, thks a lot for helping me because I was absolutely unable to
find a solution.
I will try to test what u suggest but I must admit that I am a little bit
frustrated and disappointed with the ModelDriven interface.
I am also trying to do the same thing with Spring, I hope to be more lucky
;-)
bruno
--------------------------------------------------
From: "adam pinder" <apin...@hotmail.co.uk>
Sent: Thursday, April 01, 2010 6:19 PM
To: <user@struts.apache.org>
Subject: RE: CRUD with a OneToMany association under Struts 2 / Hibernate 3
so it looks like your issue is more to do with the child values not being
set by Struts
there have been a few postings about using the [] notation on field names
to get struts to assign the values properly.
in struts1 i found it worked fine, however in struts2 i've not really seen
it working... in some of my actions i have actually added a method which
gets the parameter values off the request and populates the objects
myself..
e.g. look for parameter names starting parent.values and use the parameter
name/value to construct the correct call to set the object.
seems unnecessary as struts2 should handle it, but as i say i couldn't get
it to do it with arraylists i was using.
----------------------------------------
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 15:16:36 +0200
Thks a lot Adam it is now more concise:
Setting params
Setting params id => [ 1 ]
Setting params id => [ 1 ] method:saveOrUpdate => [ Submit ] name => [
Parent1 ] parent.values[0].id => [ 2 ] parent.values[0].name => [
Child2 ] parent.values[1].id => [ 1 ] parent.values[1].name => [ Child1 ]
Error setting value
ognl.NoSuchPropertyException: java.util.HashSet.0
at ognl.SetPropertyAccessor.getProperty(SetPropertyAccessor.java:67)
at
com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor.getProperty(XWorkCollectionPropertyAccessor.java:80)
at java.lang.Thread.run(Unknown Source)
..
Error setting value
ognl.NoSuchPropertyException: java.util.HashSet.0
at ognl.SetPropertyAccessor.getProperty(SetPropertyAccessor.java:67)
..
Error setting value
ognl.NoSuchPropertyException: java.util.HashSet.1
at ognl.SetPropertyAccessor.getProperty(SetPropertyAccessor.java:67)
at
com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor.getProperty(XWorkCollectionPropertyAccessor.java:80)
..
Error setting value
ognl.NoSuchPropertyException: java.util.HashSet.1
at ognl.SetPropertyAccessor.getProperty(SetPropertyAccessor.java:67)
at
com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor.getProperty(XWorkCollectionPropertyAccessor.java:80)
at ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1643)
..
Setting params
Do u see something wrong??
From: apin...@hotmail.co.uk
To: user@struts.apache.org
Subject: RE: CRUD with a OneToMany association under Struts 2 /
Hibernate 3
Date: Thu, 1 Apr 2010 13:54:58 +0100
set the rootlogger to warn
log4j.rootLogger=warn, stdout
rather than debug
you should only get a parameterinterceptor log entry every time you post
something to the server
----------------------------------------
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 14:51:40 +0200
thks adam but I got now thousand & thousand of lines
I am afraid that I won't be able to read its before the end of the
world in 2012..
I saw very quicky an exception at the beginning..
How can I limit this huge quantity of lines?
here is my log4j.properties file:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p
%c{1}:%L - %m%n
log4j.rootLogger=debug, stdout
log4j.logger.com.opensymphony.xwork2.interceptor.ParametersInterceptor=debug
From: apin...@hotmail.co.uk
To: user@struts.apache.org
Subject: RE: CRUD with a OneToMany association under Struts 2 /
Hibernate 3
Date: Thu, 1 Apr 2010 12:57:39 +0100
in log4j.properties file (same location as struts.xml and hibernate
config files)
add
log4j.logger.com.opensymphony.xwork2.interceptor.ParametersInterceptor=debug
this will output param name/value pairs being posted from your page.
----------------------------------------
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 13:54:33 +0200
Dear Adam,
I just added a public Child getValues(int idx) in the Parent class
definition but it is never called.
Could u explain to me where and how can I turn on the
parameterinterceptor logging? In the struts.xml file?
thks a lot
bruno
From: apin...@hotmail.co.uk
To: user@struts.apache.org
Subject: RE: CRUD with a OneToMany association under Struts 2 /
Hibernate 3
Date: Thu, 1 Apr 2010 12:18:48 +0100
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
_________________________________________________________________
Consultez gratuitement vos emails Orange, Gmail, Free, ...
directement dans HOTMAIL !
http://www.windowslive.fr/hotmail/agregation/
_________________________________________________________________
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
_________________________________________________________________
Découvrez comment SURFER DISCRETEMENT sur un site de rencontres !
http://clk.atdmt.com/FRM/go/206608211/direct/01/
_________________________________________________________________
Got a cool Hotmail story? 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
_________________________________________________________________
Consultez gratuitement vos emails Orange, Gmail, Free, ... directement
dans HOTMAIL !
http://www.windowslive.fr/hotmail/agregation/
_________________________________________________________________
Got a cool Hotmail story? 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
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org