Hi. I've solved the problem. And the solution was... reading the documentation with great attention!!! In particular, from http://struts.apache.org/2.0.11/docs/type-conversion.html, the paragraph "Relationship to Parameter Names": 1 - Use JavaBeans! The framework can only create objects if the objects obey the JavaBean specification and provide no-arg constructions, as well as getters and setters where appropriate 2 - Remember that person.name will call getPerson().setName(), but if in order for the framework to create the Person object for you, a setPerson must also exist
So: in the bean class, I've added a no-arg constructor; in the action class, I've added a property Song and a setSong method. And now I'm able to fill the list of beans modified from the form in the jsp, and use it in the action. I summerize all for future benefits. -Problem: submit a dynamic form created with a list of beans and use these beans in the action. -BEAN Provide a no-arg constructor and getters and setters for all properties. public class Song implements Serializable { private String SongId; private String StartDate; private String EndDate; private String StatusLoad; private String StatusSellable; public Song(){} public String getStartDate() {return StartDate;} public void setStartDate(String startDate) {StartDate = startDate;} public String getEndDate() {return EndDate;} public void setEndDate(String endDate) {EndDate = endDate;} public String getStatusLoad() {return StatusLoad;} public void setStatusLoad(String statusLoad) {StatusLoad = statusLoad;} public String getStatusSellable() {return StatusSellable;} public void setStatusSellable(String statusSellable) {StatusSellable = statusSellable;} public String getSongId() {return SongId;} public void setSongId(String songId) {SongId = songId;} } -ACTION Provide the beans list property with get and set, and a bean property with set. public class ResubmitAction extends BaseAction { private List<Song> songs = new ArrayList(); private Song song = null; public String resubmitCatalog() { ... //use the beans list coming from the form if (this.songs != null) { log.debug("song list size "+songs.size()); Iterator iter = this.songs.iterator(); while (iter.hasNext()) { Song tmp = (Song) iter.next(); if (tmp != null) { log.debug("------\n"+tmp.toString()+"\n------"); } } } } public List<Song> getSongs() {return songs;} public void setSongs(List<Song> songs) {this.songs = songs;} public void setSong(Song song) {this.song = song;} } -CONVERSION PROPERTIES FILE Create a ActionName-conversion.properties file in the same path of the action, so in my case ResubmitAction-conversion.properties where ResubmitAction.class is located. Element_songs=console.beans.Song CreateIfNull_songs=true In the first version of the file there was also the line KeyProperty_songs=SongId but this is useless because in the jsp I don't use the unique id of the bean for iteration throw the list. -JSP Create the form using iterator tag and use stat.index to reference the current iteration index. Pay attention to the ognl expression. <s:iterator id="Song" value="songs" status="stat"> <tr> <td> <s:hidden name="songs[%{#stat.index}].songId"/> </td> </tr> <tr> <td class="txtBold">START DATE</td> <td><jscalendar:jscalendar format="%d.%m.%Y" name="songs[%{#stat.index}].startDate" /></td> </tr> <tr> <td class="txtBold">END DATE</td> <td><jscalendar:jscalendar format="%d.%m.%Y" name="songs[%{#stat.index}].endDate"/></td> </tr> <tr> <td class="txtBold">STATUS LOAD</td> <td><s:textfield theme="simple" name="songs[%{#stat.index}].statusLoad" /></td> </tr> <tr> <td class="txtBold">STATUS SELLABLE</td> <td><s:textfield theme="simple" name="songs[%{#stat.index}].statusSellable" /></td> </tr> </s:iterator> and the resulting html is (the beans list has 2 elements): <input type="hidden" id="ResubmitCatalog_songs_0__songId" value="9121587" name="songs[0].songId"/> <input type="text" id="ResubmitCatalog_songs_0__startDate" value="29.11.2007" name="songs[0].startDate"/> <input type="text" id="ResubmitCatalog_songs_0__endDate" value="29.11.2007" name="songs[0].endDate"/> <input type="text" id="ResubmitCatalog_songs_0__statusLoad" value="Publish" name="songs[0].statusLoad"/> <input type="text" id="ResubmitCatalog_songs_0__statusSellable" value="1" name="songs[0].statusSellable"/> <input type="hidden" id="ResubmitCatalog_songs_1__songId" value="9121591" name="songs[1].songId"/> <input type="text" id="ResubmitCatalog_songs_1__startDate" value="29.11.2007" name="songs[1].startDate"/> <input type="text" id="ResubmitCatalog_songs_1__endDate" value="29.11.2007" name="songs[1].endDate"/> <input type="text" id="ResubmitCatalog_songs_1__statusLoad" value="Publish" name="songs[1].statusLoad"/> <input type="text" id="ResubmitCatalog_songs_1__statusSellable" value="1" name="songs[1].statusSellable"/> That's all. And I think it's enough... It was hard, but with an happy end. Thanks to all for replies to my first post. -- View this message in context: http://www.nabble.com/-S2--Beans-list-in-Dynamic-form-and-ParametersInterceptor-problem-tp15016850p15038327.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]