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]>

Reply via email to