just change u r indexed method getPermissionLanguage as follows... public PermissionLanguageData getPermissionLanguage(int index) { while(index >=records().size() ){ this.records.add(new PermissionLanguageData()); } return (PermissionLanguageData) records.get(index); }
regards, Shirish -----Original Message----- From: jot [mailto:[EMAIL PROTECTED]] Sent: Friday, January 10, 2003 12:29 PM To: struts-user Cc: jot Subject: Help:: Indexed properties and form Hi, I have successfully created a JSP to output a collection that looks like this: <logic:iterate id="permissionLanguage" name="permissionForm" property="permissionLanguageData"> <tr> <td> <bean:write name="permissionLanguage" property="languageName"/> <html:hidden name="permissionLanguage" property="languageId" indexed="true"/> </td> <td colspan="2"> <html:hidden name="permissionLanguage" property="permissionTranslationId" indexed="true"/> <html:text name="permissionLanguage" property="permissionName" indexed="true" maxlength="200"/> </td> </tr> </logic:iterate> %%%%%%%%%%%%%%%%%%%%%%%%%%% Which will in turn generate: <tr> <td> Italiano <input type="hidden" name="permissionLanguage[0].languageId" value="it"> </td> <td colspan="2"> <input type="hidden" name="permissionLanguage[0].permissionTranslationId" value="1"> <input type="text" name="permissionLanguage[0].permissionName" value="test"> </td> </tr> <tr> <td> English <input type="hidden" name="permissionLanguage[1].languageId" value="en"> </td> <td colspan="2"> <input type="hidden" name="permissionLanguage[1].permissionTranslationId" value="2"> <input type="text" name="permissionLanguage[1].permissionName" value="test 2"> </td> </tr> %%%%%%%%%%%%%%%%%%%%%%%%%%% and my form class looks something like: public final class PermissionForm extends ValidatorForm { /** * The Collection to hold all of the PermissionLanguageData objects */ private ArrayList records = null; /** * Standard constructor. */ public PermissionForm() { } /** * Get a specific row from the records ArrayList, based on index * * @param index The index of the row to retrieve */ public PermissionLanguageData getPermissionLanguage(int index) { // a a bit of test code System.out.println("index = " + index); System.out.println("records.size() = " + records.size()); return (PermissionLanguageData) records.get(index); } /** * Copies the data from the EJB into the form. * * @param value The Collection of PermissionLanguageData */ public void copyFrom( Collection value ) { records = new ArrayList(value); this.permission = ((PermissionLanguageData) records.get(1)).getPermission(); } /** * Returns a Collection of PermissionLanguageData * * @return The Collection of PermissionLanguageData object */ public Collection getPermissionLanguageData() { return this.records; } } %%%%%%%%%%%%%%%%%%%%%%%%%%% This part is just what I wanted as it "should" allow me to edit my recordHowever, I thought that this would work without a problem but I now have the problem that when I submit my form, the Collection (it's an ArrayList) that I am trying to populate/edit is empty. How do I ensure that the ArrayList in my form class that I am submitting to contains the Collection of objects that I am trying to edit? I am not sure how this would be done because the form class gets called before the action class. All I can think of is to add a couple of lines to add a new row into the ArrayList in the getPermissionLanguage() method. The error that I am getting is caused by a java.lang.IndexOutOfBoundsException Any suggestions that anyone may have would be greatly appreciated as I have been stuffing around with this for some time now. thanks Jordan p.s. here is the whole stack trace %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% javax.servlet.ServletException: BeanUtils.populate at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1099) at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.j ava:798) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1422) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:523) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja va:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja va:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:2 46) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180 ) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve. java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172 ) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne ction(Http11Protocol.java:380) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav a:533) at java.lang.Thread.run(Thread.java:536) root cause java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils. java:475) at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils. java:410) at org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.j ava:749) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:78 0) at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:793) at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:726) at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1097) at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.j ava:798) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1422) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:523) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja va:260) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja va:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:2 46) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2396) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180 ) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve. java:170) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172 ) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:469) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :174) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok eNext(StandardPipeline.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:405) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne ction(Http11Protocol.java:380) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:508) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav a:533) at java.lang.Thread.run(Thread.java:536) Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.RangeCheck(ArrayList.java:508) at java.util.ArrayList.get(ArrayList.java:320) at scoop.web.struts.permission.PermissionForm.getPermissionLanguage(PermissionF orm.java:80) ... 50 more -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>