You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Andrew Sharpe <an...@yahoo.com> on 2010/03/15 23:03:30 UTC

Can a collection property have its changes saved back to the ActionForm?

Hello all,

I have a List<String> collection that I am displaying in an
<html:select> and it is working great.  The problem is that my
jsp page makes changes to that <html:select> control via
javascript (adds new options, removes, etc).  I would like these
changes to be saved back to the ActionForm, preferrably to the same
collection where it got its data from.  

Struts does not seem to do it by default, that is, the
<html:options> tag seems to make use of the ActionForm's get
property, but not its set.  If it is supposed to behave this way please
let me know and I will reexamine my syntax.  Otherwise can someone tell
me the easiest way to do this?  I am using Struts 1.3.8 and
unfortunately cannot upgrade to Struts 2.

Many thanks in advance,

Andrew



      __________________________________________________________________
The new Internet Explorer® 8 - Faster, safer, easier.  Optimized for Yahoo!  Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Can a collection property have its changes saved back to the ActionForm?

Posted by Andrew Sharpe <an...@yahoo.com>.
Apologies all, I am editing my solution below for clarity and accuracy:



----- Original Message ----
From: Andrew Sharpe <an...@yahoo.com>
To: Struts Users Mailing List <us...@struts.apache.org>
Sent: Mon, March 22, 2010 8:44:42 AM
Subject: Re: Can a collection property have its changes saved back to the ActionForm?

Thanks Adam.  I ended up using your solution.  I'm not thrilled about the user seeing the listbox items get auto selected after they submit the form, but the code is certainly cleaner than adding and removing hidden controls.  For the archives, here's what I went with:

JSP

function setStatus() {
    var emailSelect = document.getElementById("emailSelect");
    emailSelect.multiple = true;
    emailSelect.focus(); // This is needed to force IE to execute the line above.
    for (var i = 0; i < emailSelect.length; i++) {
        emailSelect.options[i].selected = true;
    }    
}

<html:select name="formName" property="addresses" size="4" styleId="emailSelect">
    <html:options name="preferencesForm" property="oldAddresses"/>
</html:select>

<html:submit onclick="setStatus()"/>

ACTIONFORM

private String[] addresses;
    
public String[] getAddresses() {
    return addresses;
}
    
public void setAddresses(String[] value) {
    addresses = value;
}

private final List<String> oldAddresses = new ArrayList<String>();
    
public List<String> getOldAddresses() {
    return oldAddresses;
}

Thanks again,

Andrew



----- Original Message ----
From: adam pinder <ap...@hotmail.co.uk>
To: user@struts.apache.org
Sent: Thu, March 18, 2010 6:11:27 AM
Subject: RE: Can a collection property have its changes saved back to the ActionForm?



you want to save the options in the select not a selected option...

if you make the select a multiple select and in javascript you select all options.... are all the option values sent to the server against the same parameter name (turn on parameter interceptor logging to check)... 

if so, add a set method in your action with the same name as the select element that accepts a string array, like

setNewRole(String[] newRoles)

inside this method you can initialise your proper ArrayList and add the elements from the string array into it.

you still need the javascript to select options but at least you're not creating new elements.

i haven't checked if multiple selects sends its parameters in this way but it works when multiple checkbox elements all have the same name and are sent as name/values pair.

ps. if i've misunderstood and you just want to save multiple selected options, then you can omit the javascript part which would be better.


----------------------------------------
> Date: Wed, 17 Mar 2010 17:23:45 -0700
> From: andrewrwsharpe@yahoo.com
> Subject: Re: Can a collection property have its changes saved back to the ActionForm?
> To: user@struts.apache.org
>
> For the archives, the solution I'm going with is to have the javascript add elements to the document corresponding to the new values in the select. The names of the hidden elements will be indexed. Something like this:
>
> Action Form:
>
> public List getOldList()
>
> public String getSelectedValue()
>
> public void setNewList(int index, String value)
>
> JSP:
>
> 
> 
> 
>
> 
>
>


>
> Then the setNewList method gets called on the form with the new values from the select box.
>
> If anyone has any better ideas I'm open to hearing them, but this seems to do the trick.
>
> Andrew
>
>
>
> ----- Original Message ----
> From: Andrew Sharpe 
> To: user@struts.apache.org
> Sent: Mon, March 15, 2010 6:03:30 PM
> Subject: Can a collection property have its changes saved back to the ActionForm?
>
> Hello all,
>
> I have a List collection that I am displaying in an
> and it is working great. The problem is that my
> jsp page makes changes to that control via
> javascript (adds new options, removes, etc). I would like these
> changes to be saved back to the ActionForm, preferrably to the same
> collection where it got its data from.
>
> Struts does not seem to do it by default, that is, the
> tag seems to make use of the ActionForm's get
> property, but not its set. If it is supposed to behave this way please
> let me know and I will reexamine my syntax. Otherwise can someone tell
> me the easiest way to do this? I am using Struts 1.3.8 and
> unfortunately cannot upgrade to Struts 2.
>
> Many thanks in advance,
>
> Andrew
>
>
>
> __________________________________________________________________
> The new Internet Explorer® 8 - Faster, safer, easier. Optimized for Yahoo! Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
> __________________________________________________________________
> Looking for the perfect gift? Give the gift of Flickr!
>
> http://www.flickr.com/gift/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>                          
_________________________________________________________________
Got a cool Hotmail story? Tell us now
http://clk.atdmt.com/UKM/go/195013117/direct/01/
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


      __________________________________________________________________
Looking for the perfect gift? Give the gift of Flickr! 

http://www.flickr.com/gift/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


      __________________________________________________________________
Connect with friends from any web browser - no download required. Try the new Yahoo! Canada Messenger for the Web BETA at http://ca.messenger.yahoo.com/webmessengerpromo.php

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Can a collection property have its changes saved back to the ActionForm?

Posted by Andrew Sharpe <an...@yahoo.com>.
Thanks Adam.  I ended up using your solution.  I'm not thrilled about the user seeing the listbox items get auto selected after they submit the form, but the code is certainly cleaner than adding and removing hidden controls.  For the archives, here's what I went with:

JSP

function setStatus() {
    var emailSelect = document.getElementById("emailSelect");
    emailSelect.multiple = true;
    emailSelect.focus(); // This is needed to force IE to execute the line above.
    for (var i = 0; i < emailSelect.length; i++) {
        emailSelect.options[i].selected = true;
    }    
}

<html:select name="formName" property="addresses" onchange="setEmailButtonStatus();" size="4">
    <html:options name="preferencesForm" property="oldAddresses"/>
</html:select>

ACTIONFORM

private String[] addresses;
    
public String[] getAddresses() {
    return addresses;
}
    
public void setAddresses(String[] value) {
    addresses = value;
}

private final List<String> oldAddresses = new ArrayList<String>();
    
public List<String> getOldAddresses() {
    return oldAddresses;
}

Thanks again,

Andrew



----- Original Message ----
From: adam pinder <ap...@hotmail.co.uk>
To: user@struts.apache.org
Sent: Thu, March 18, 2010 6:11:27 AM
Subject: RE: Can a collection property have its changes saved back to the ActionForm?



you want to save the options in the select not a selected option...

if you make the select a multiple select and in javascript you select all options.... are all the option values sent to the server against the same parameter name (turn on parameter interceptor logging to check)... 

if so, add a set method in your action with the same name as the select element that accepts a string array, like

setNewRole(String[] newRoles)

inside this method you can initialise your proper ArrayList and add the elements from the string array into it.

you still need the javascript to select options but at least you're not creating new elements.

i haven't checked if multiple selects sends its parameters in this way but it works when multiple checkbox elements all have the same name and are sent as name/values pair.

ps. if i've misunderstood and you just want to save multiple selected options, then you can omit the javascript part which would be better.


----------------------------------------
> Date: Wed, 17 Mar 2010 17:23:45 -0700
> From: andrewrwsharpe@yahoo.com
> Subject: Re: Can a collection property have its changes saved back to the ActionForm?
> To: user@struts.apache.org
>
> For the archives, the solution I'm going with is to have the javascript add elements to the document corresponding to the new values in the select. The names of the hidden elements will be indexed. Something like this:
>
> Action Form:
>
> public List getOldList()
>
> public String getSelectedValue()
>
> public void setNewList(int index, String value)
>
> JSP:
>
> 
> 
> 
>
> 
>
>


>
> Then the setNewList method gets called on the form with the new values from the select box.
>
> If anyone has any better ideas I'm open to hearing them, but this seems to do the trick.
>
> Andrew
>
>
>
> ----- Original Message ----
> From: Andrew Sharpe 
> To: user@struts.apache.org
> Sent: Mon, March 15, 2010 6:03:30 PM
> Subject: Can a collection property have its changes saved back to the ActionForm?
>
> Hello all,
>
> I have a List collection that I am displaying in an
> and it is working great. The problem is that my
> jsp page makes changes to that control via
> javascript (adds new options, removes, etc). I would like these
> changes to be saved back to the ActionForm, preferrably to the same
> collection where it got its data from.
>
> Struts does not seem to do it by default, that is, the
> tag seems to make use of the ActionForm's get
> property, but not its set. If it is supposed to behave this way please
> let me know and I will reexamine my syntax. Otherwise can someone tell
> me the easiest way to do this? I am using Struts 1.3.8 and
> unfortunately cannot upgrade to Struts 2.
>
> Many thanks in advance,
>
> Andrew
>
>
>
> __________________________________________________________________
> The new Internet Explorer® 8 - Faster, safer, easier. Optimized for Yahoo! Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
> __________________________________________________________________
> Looking for the perfect gift? Give the gift of Flickr!
>
> http://www.flickr.com/gift/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>                           
_________________________________________________________________
Got a cool Hotmail story? Tell us now
http://clk.atdmt.com/UKM/go/195013117/direct/01/
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


      __________________________________________________________________
Looking for the perfect gift? Give the gift of Flickr! 

http://www.flickr.com/gift/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Can a collection property have its changes saved back to the ActionForm?

Posted by adam pinder <ap...@hotmail.co.uk>.
 
you want to save the options in the select not a selected option...
 
if you make the select a multiple select and in javascript you select all options.... are all the option values sent to the server against the same parameter name (turn on parameter interceptor logging to check)... 
 
if so, add a set method in your action with the same name as the select element that accepts a string array, like
 
setNewRole(String[] newRoles)
 
inside this method you can initialise your proper ArrayList and add the elements from the string array into it.
 
you still need the javascript to select options but at least you're not creating new elements.
 
i haven't checked if multiple selects sends its parameters in this way but it works when multiple checkbox elements all have the same name and are sent as name/values pair.
 
ps. if i've misunderstood and you just want to save multiple selected options, then you can omit the javascript part which would be better.


----------------------------------------
> Date: Wed, 17 Mar 2010 17:23:45 -0700
> From: andrewrwsharpe@yahoo.com
> Subject: Re: Can a collection property have its changes saved back to the ActionForm?
> To: user@struts.apache.org
>
> For the archives, the solution I'm going with is to have the javascript add elements to the document corresponding to the new values in the select. The names of the hidden elements will be indexed. Something like this:
>
> Action Form:
>
> public List getOldList()
>
> public String getSelectedValue()
>
> public void setNewList(int index, String value)
>
> JSP:
>
> 
> 
> 
>
> 
>
>


>
> Then the setNewList method gets called on the form with the new values from the select box.
>
> If anyone has any better ideas I'm open to hearing them, but this seems to do the trick.
>
> Andrew
>
>
>
> ----- Original Message ----
> From: Andrew Sharpe 
> To: user@struts.apache.org
> Sent: Mon, March 15, 2010 6:03:30 PM
> Subject: Can a collection property have its changes saved back to the ActionForm?
>
> Hello all,
>
> I have a List collection that I am displaying in an
> and it is working great. The problem is that my
> jsp page makes changes to that control via
> javascript (adds new options, removes, etc). I would like these
> changes to be saved back to the ActionForm, preferrably to the same
> collection where it got its data from.
>
> Struts does not seem to do it by default, that is, the
> tag seems to make use of the ActionForm's get
> property, but not its set. If it is supposed to behave this way please
> let me know and I will reexamine my syntax. Otherwise can someone tell
> me the easiest way to do this? I am using Struts 1.3.8 and
> unfortunately cannot upgrade to Struts 2.
>
> Many thanks in advance,
>
> Andrew
>
>
>
> __________________________________________________________________
> The new Internet Explorer® 8 - Faster, safer, easier. Optimized for Yahoo! Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>
> __________________________________________________________________
> Looking for the perfect gift? Give the gift of Flickr!
>
> http://www.flickr.com/gift/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 		 	   		  
_________________________________________________________________
Got a cool Hotmail story? Tell us now
http://clk.atdmt.com/UKM/go/195013117/direct/01/
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Can a collection property have its changes saved back to the ActionForm?

Posted by Andrew Sharpe <an...@yahoo.com>.
For the archives, the solution I'm going with is to have the javascript add <html:hidden> elements to the document corresponding to the new values in the select.  The names of the hidden elements will be indexed.  Something like this:

Action Form:

public List<String> getOldList()

public String getSelectedValue()

public void setNewList(int index, String value)

JSP:

<html:select name="formName" property="selectedValue" styleId="myId">
     <html:options name="formName" property="oldList"/>
</html:select>

<html:submit onclick="saveSelect()"/>

<script type="text/javascript">
function saveSelect() {
     var selectControl = document.getElementById('myId);
        for (var i = 0; i < select.length; i++) {
        var hid = document.createElement("input");
        hid.type = "hidden";
        hid.name = "newList[" + i + "]";
        hid.value = selectControl.options[i].value;
        document.forms[0].appendChild(hid);
    }
}
</script>

Then the setNewList method gets called on the form with the new values from the select box.

If anyone has any better ideas I'm open to hearing them, but this seems to do the trick.

Andrew



----- Original Message ----
From: Andrew Sharpe <an...@yahoo.com>
To: user@struts.apache.org
Sent: Mon, March 15, 2010 6:03:30 PM
Subject: Can a collection property have its changes saved back to the ActionForm?

Hello all,

I have a List<String> collection that I am displaying in an
<html:select> and it is working great.  The problem is that my
jsp page makes changes to that <html:select> control via
javascript (adds new options, removes, etc).  I would like these
changes to be saved back to the ActionForm, preferrably to the same
collection where it got its data from.  

Struts does not seem to do it by default, that is, the
<html:options> tag seems to make use of the ActionForm's get
property, but not its set.  If it is supposed to behave this way please
let me know and I will reexamine my syntax.  Otherwise can someone tell
me the easiest way to do this?  I am using Struts 1.3.8 and
unfortunately cannot upgrade to Struts 2.

Many thanks in advance,

Andrew



      __________________________________________________________________
The new Internet Explorer® 8 - Faster, safer, easier.  Optimized for Yahoo!  Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


      __________________________________________________________________
Looking for the perfect gift? Give the gift of Flickr! 

http://www.flickr.com/gift/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org