You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Ryan Beckes <rb...@gmail.com> on 2010/10/12 20:21:57 UTC
Setting associated objects for the current model
Hello,
I'm using an action which implements the ModelDriven interface where my
model is a hibernate POJO (e.g. Customer). In this Customer I have a
OneToMany relationship with another hibernate POJO (e.g. Address)...
/** persistent field */
@OneToMany(mappedBy="customer",
targetEntity=com.inftropy.plus.account.Customer.model.Address.class, cascade
= { CascadeType.ALL}, fetch=FetchType.EAGER)
@IndexedEmbedded
private Set<Address> addresses;
... I'm trying to create a form that allows the setting for multiple
addresses for the current customer. For example, say my address has two
fields (id and name) and I want to set two addresses for a certain
Customer....
BEGIN jsp
<s:iterator value="model" status="customerStatus" id="customer">
<table>
<tr>
<td>
<s:text name="addressIdTitle"/>
</td>
<s:iterator value="#attr.customer.addresses"
status="custAddressStatus">
<td>
<s:textfield name="addresses.id" value="%{id}"/>
</td>
</s:iterator>
</tr>
<tr>
<td>
<s:text name="addressCodeTitle"/>
</td>
<s:iterator value="#attr.customer.addresses"
status="custAddressStatus">
<td>
<s:textfield name="addresses.code" value="%{code}"/>
</td>
</s:iterator>
</tr>
</s:iterator>
END jsp
BEGIN resulting html
<table>
<tr>
<td>
addressIdTitle
</td>
<td>
<input type="text" name="addresses.id" value="2"
id="Customer_update_addresses_id"/>
</td>
<td>
<input type="text" name="addresses.id" value="1"
id="Customer_update_addresses_id"/>
</td>
</tr>
<tr>
<td>
addressCodeTitle
</td>
<td>
<input type="text" name="addresses.code" value="SHIPTO"
id="Customer_update_addresses_code"/>
</td>
<td>
<input type="text" name="addresses.code" value="BILLTO"
id="Customer_update_addresses_code"/>
</td>
</tr>
</table>
END resulting html
... Is there a convention I can use (in this case I tried
addresses.<field>, which didn't work) so that the fields I set
correspond to the associated Address object for the current model?
Thanks,
Ryan
Re: Setting associated objects for the current model
Posted by Dave Newton <da...@gmail.com>.
Glad you worked it out :)
Dave
On Wed, Oct 13, 2010 at 4:30 PM, Ryan Beckes <rb...@gmail.com> wrote:
> Dave,
>
> Thanks for the tip, it worked perfectly! To recap, I changed the addresses
> mapping....
>
> /** persistent field */
> @OneToMany(mappedBy="customer",
> targetEntity=com.inftropy.plus.account.Customer.model.Address.class,
> cascade
> = { CascadeType.ALL}, fetch=FetchType.EAGER)
> @IndexedEmbedded
> @MapKey(name="id")
> private Map<java.lang.Long, Address> addresses;
>
> ... and the jsp...
>
> <table>
> <tr>
> <td>
> <s:text name="addressIdTitle"/>
> </td>
> <s:iterator value="#attr.customer.addresses"
> status="custAddressStatus">
> <td>
> <s:textfield name="addresses[%{key}].id" value="%{value.id
> }"/>
> </td>
> </s:iterator>
> </tr>
> <tr>
> <td>
> <s:text name="addressCodeTitle"/>
> </td>
> <s:iterator value="#attr.customer.addresses"
> status="custAddressStatus">
> <td>
> <s:textfield name="addresses[%{key}].code"
> value="%{value.code}"/>
> </td>
> </s:iterator>
> </tr>
> </table>
>
>
> Best,
> Ryan
>
>
> On Tue, Oct 12, 2010 at 1:26 PM, Dave Newton <da...@gmail.com>
> wrote:
>
> > I don't know about sets; personally I'd use a map so you actually have a
> > way
> > to access them by something meaningful, like an ID. Then you use
> map-based
> > property field names (it's [] or (), with the key inside, I forget which
> > off
> > the top of my head). I think () is for indexed, so I'd aim for [] first.
> >
> > Dave
> >
> > On Tue, Oct 12, 2010 at 2:21 PM, Ryan Beckes <rb...@gmail.com> wrote:
> >
> > > Hello,
> > >
> > > I'm using an action which implements the ModelDriven interface where my
> > > model is a hibernate POJO (e.g. Customer). In this Customer I have a
> > > OneToMany relationship with another hibernate POJO (e.g. Address)...
> > >
> > > /** persistent field */
> > > @OneToMany(mappedBy="customer",
> > > targetEntity=com.inftropy.plus.account.Customer.model.Address.class,
> > > cascade
> > > = { CascadeType.ALL}, fetch=FetchType.EAGER)
> > > @IndexedEmbedded
> > > private Set<Address> addresses;
> > >
> > > ... I'm trying to create a form that allows the setting for multiple
> > > addresses for the current customer. For example, say my address has two
> > > fields (id and name) and I want to set two addresses for a certain
> > > Customer....
> > >
> > > BEGIN jsp
> > > <s:iterator value="model" status="customerStatus" id="customer">
> > > <table>
> > > <tr>
> > > <td>
> > > <s:text name="addressIdTitle"/>
> > > </td>
> > > <s:iterator value="#attr.customer.addresses"
> > > status="custAddressStatus">
> > > <td>
> > > <s:textfield name="addresses.id" value="%{id}"/>
> > > </td>
> > > </s:iterator>
> > > </tr>
> > > <tr>
> > > <td>
> > > <s:text name="addressCodeTitle"/>
> > > </td>
> > > <s:iterator value="#attr.customer.addresses"
> > > status="custAddressStatus">
> > > <td>
> > > <s:textfield name="addresses.code" value="%{code}"/>
> > > </td>
> > > </s:iterator>
> > > </tr>
> > > </s:iterator>
> > > END jsp
> > >
> > > BEGIN resulting html
> > >
> > > <table>
> > > <tr>
> > > <td>
> > > addressIdTitle
> > > </td>
> > >
> > >
> > > <td>
> > > <input type="text" name="addresses.id" value="2"
> > > id="Customer_update_addresses_id"/>
> > > </td>
> > >
> > > <td>
> > > <input type="text" name="addresses.id" value="1"
> > > id="Customer_update_addresses_id"/>
> > > </td>
> > >
> > > </tr>
> > > <tr>
> > > <td>
> > >
> > > addressCodeTitle
> > > </td>
> > >
> > > <td>
> > > <input type="text" name="addresses.code" value="SHIPTO"
> > > id="Customer_update_addresses_code"/>
> > > </td>
> > >
> > > <td>
> > > <input type="text" name="addresses.code" value="BILLTO"
> > > id="Customer_update_addresses_code"/>
> > > </td>
> > > </tr>
> > > </table>
> > > END resulting html
> > >
> > > ... Is there a convention I can use (in this case I tried
> > > addresses.<field>, which didn't work) so that the fields I set
> > > correspond to the associated Address object for the current model?
> > >
> > > Thanks,
> > > Ryan
> > >
> >
>
Re: Setting associated objects for the current model
Posted by Ryan Beckes <rb...@gmail.com>.
Dave,
Thanks for the tip, it worked perfectly! To recap, I changed the addresses
mapping....
/** persistent field */
@OneToMany(mappedBy="customer",
targetEntity=com.inftropy.plus.account.Customer.model.Address.class, cascade
= { CascadeType.ALL}, fetch=FetchType.EAGER)
@IndexedEmbedded
@MapKey(name="id")
private Map<java.lang.Long, Address> addresses;
... and the jsp...
<table>
<tr>
<td>
<s:text name="addressIdTitle"/>
</td>
<s:iterator value="#attr.customer.addresses"
status="custAddressStatus">
<td>
<s:textfield name="addresses[%{key}].id" value="%{value.id}"/>
</td>
</s:iterator>
</tr>
<tr>
<td>
<s:text name="addressCodeTitle"/>
</td>
<s:iterator value="#attr.customer.addresses"
status="custAddressStatus">
<td>
<s:textfield name="addresses[%{key}].code"
value="%{value.code}"/>
</td>
</s:iterator>
</tr>
</table>
Best,
Ryan
On Tue, Oct 12, 2010 at 1:26 PM, Dave Newton <da...@gmail.com> wrote:
> I don't know about sets; personally I'd use a map so you actually have a
> way
> to access them by something meaningful, like an ID. Then you use map-based
> property field names (it's [] or (), with the key inside, I forget which
> off
> the top of my head). I think () is for indexed, so I'd aim for [] first.
>
> Dave
>
> On Tue, Oct 12, 2010 at 2:21 PM, Ryan Beckes <rb...@gmail.com> wrote:
>
> > Hello,
> >
> > I'm using an action which implements the ModelDriven interface where my
> > model is a hibernate POJO (e.g. Customer). In this Customer I have a
> > OneToMany relationship with another hibernate POJO (e.g. Address)...
> >
> > /** persistent field */
> > @OneToMany(mappedBy="customer",
> > targetEntity=com.inftropy.plus.account.Customer.model.Address.class,
> > cascade
> > = { CascadeType.ALL}, fetch=FetchType.EAGER)
> > @IndexedEmbedded
> > private Set<Address> addresses;
> >
> > ... I'm trying to create a form that allows the setting for multiple
> > addresses for the current customer. For example, say my address has two
> > fields (id and name) and I want to set two addresses for a certain
> > Customer....
> >
> > BEGIN jsp
> > <s:iterator value="model" status="customerStatus" id="customer">
> > <table>
> > <tr>
> > <td>
> > <s:text name="addressIdTitle"/>
> > </td>
> > <s:iterator value="#attr.customer.addresses"
> > status="custAddressStatus">
> > <td>
> > <s:textfield name="addresses.id" value="%{id}"/>
> > </td>
> > </s:iterator>
> > </tr>
> > <tr>
> > <td>
> > <s:text name="addressCodeTitle"/>
> > </td>
> > <s:iterator value="#attr.customer.addresses"
> > status="custAddressStatus">
> > <td>
> > <s:textfield name="addresses.code" value="%{code}"/>
> > </td>
> > </s:iterator>
> > </tr>
> > </s:iterator>
> > END jsp
> >
> > BEGIN resulting html
> >
> > <table>
> > <tr>
> > <td>
> > addressIdTitle
> > </td>
> >
> >
> > <td>
> > <input type="text" name="addresses.id" value="2"
> > id="Customer_update_addresses_id"/>
> > </td>
> >
> > <td>
> > <input type="text" name="addresses.id" value="1"
> > id="Customer_update_addresses_id"/>
> > </td>
> >
> > </tr>
> > <tr>
> > <td>
> >
> > addressCodeTitle
> > </td>
> >
> > <td>
> > <input type="text" name="addresses.code" value="SHIPTO"
> > id="Customer_update_addresses_code"/>
> > </td>
> >
> > <td>
> > <input type="text" name="addresses.code" value="BILLTO"
> > id="Customer_update_addresses_code"/>
> > </td>
> > </tr>
> > </table>
> > END resulting html
> >
> > ... Is there a convention I can use (in this case I tried
> > addresses.<field>, which didn't work) so that the fields I set
> > correspond to the associated Address object for the current model?
> >
> > Thanks,
> > Ryan
> >
>
Re: Setting associated objects for the current model
Posted by Dave Newton <da...@gmail.com>.
I don't know about sets; personally I'd use a map so you actually have a way
to access them by something meaningful, like an ID. Then you use map-based
property field names (it's [] or (), with the key inside, I forget which off
the top of my head). I think () is for indexed, so I'd aim for [] first.
Dave
On Tue, Oct 12, 2010 at 2:21 PM, Ryan Beckes <rb...@gmail.com> wrote:
> Hello,
>
> I'm using an action which implements the ModelDriven interface where my
> model is a hibernate POJO (e.g. Customer). In this Customer I have a
> OneToMany relationship with another hibernate POJO (e.g. Address)...
>
> /** persistent field */
> @OneToMany(mappedBy="customer",
> targetEntity=com.inftropy.plus.account.Customer.model.Address.class,
> cascade
> = { CascadeType.ALL}, fetch=FetchType.EAGER)
> @IndexedEmbedded
> private Set<Address> addresses;
>
> ... I'm trying to create a form that allows the setting for multiple
> addresses for the current customer. For example, say my address has two
> fields (id and name) and I want to set two addresses for a certain
> Customer....
>
> BEGIN jsp
> <s:iterator value="model" status="customerStatus" id="customer">
> <table>
> <tr>
> <td>
> <s:text name="addressIdTitle"/>
> </td>
> <s:iterator value="#attr.customer.addresses"
> status="custAddressStatus">
> <td>
> <s:textfield name="addresses.id" value="%{id}"/>
> </td>
> </s:iterator>
> </tr>
> <tr>
> <td>
> <s:text name="addressCodeTitle"/>
> </td>
> <s:iterator value="#attr.customer.addresses"
> status="custAddressStatus">
> <td>
> <s:textfield name="addresses.code" value="%{code}"/>
> </td>
> </s:iterator>
> </tr>
> </s:iterator>
> END jsp
>
> BEGIN resulting html
>
> <table>
> <tr>
> <td>
> addressIdTitle
> </td>
>
>
> <td>
> <input type="text" name="addresses.id" value="2"
> id="Customer_update_addresses_id"/>
> </td>
>
> <td>
> <input type="text" name="addresses.id" value="1"
> id="Customer_update_addresses_id"/>
> </td>
>
> </tr>
> <tr>
> <td>
>
> addressCodeTitle
> </td>
>
> <td>
> <input type="text" name="addresses.code" value="SHIPTO"
> id="Customer_update_addresses_code"/>
> </td>
>
> <td>
> <input type="text" name="addresses.code" value="BILLTO"
> id="Customer_update_addresses_code"/>
> </td>
> </tr>
> </table>
> END resulting html
>
> ... Is there a convention I can use (in this case I tried
> addresses.<field>, which didn't work) so that the fields I set
> correspond to the associated Address object for the current model?
>
> Thanks,
> Ryan
>