Yes, except for 2 minor differences, I'm using an array[] instead of an
ArrayList, and their the same bean, with two different actions, sorta like
the following:

public class PropertyEditAction extends Action {
        //Load, Display, and save one Property
}
public class PropertyListAction extends Action {
        //Load, Display, and Save list of beans all at once
}
public class Property extends ActionForm {

        private String blahItem;
        private Property[] propertyList;

        public Property() {
                blahItem = null;
                propertyList = null;
                }

        public String getBlahItem(){return blahItem;}
        public void setBlahItem(String tempItem){blahItem = tempItem;}

        public Property getPropertyList(int i) {
                return propertyList[i];
        }

        public void setPropertyList(Property[] properties) {
                propertyList = properties;
        }
        
        public void setPropertyList(int i, Property property) {
                propertyList[i] = property;
        }
}


-----Original Message-----
From: Mark Lowe [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, January 14, 2004 9:58 AM
To: Struts Users Mailing List
Subject: Re: BeanUtils.populate Invocation Error

So have you something like this?

public class PropertyEditForm extends ActionForm {
        //bla bla
        
}

public class PropertyListForm extends ActionForm {

        private ArrayList propertyList;

        public PropertyListForm() {
                this.propertyList = new ArrayList();
        }

        public PropertyEditForm getProperty(int i) {
                return (PropertyEditForm) propertyList.get(i);
        }

        public void setProperties(Object[] properties) {
                ..
        }
        
        public void setProperty(int i, PropertyEditForm property) {
                propertyList.add(i, property);
        }


}



On 14 Jan 2004, at 14:38, Nathan Ewing wrote:

> Basically all I have is 1 form bean that includes 2 arrays of itself  
> in it.
>
> When the app runs it gets 2 lists of the different categories of
> SoldProperty and makes a jsp form that allows you to change certain  
> details
> of the beans all at once, and then if you click on one of the beans  
> you can
> edit them individually.
>
> There are actually two actions, one is PropertyList, which only loads  
> and
> manages those two arrays of beans, and then there is PropertyEdit,  
> which
> works on an individual bean, and ignores the two lists.
>
> I hope this makes sense.
>
> The code I posted below is a shortcut I put in all my beans.  I  
> overrode
> ActionForm and put a couple extra functions in.  One of them  
> automatically
> resets all the variables in the bean for me without having to manually  
> write
> a reset function for every bean to do the same thing.
>
> The other changes the way validate works.  Instead of 1 function that  
> does
> all the validating, I write individual validateAttributeName()  
> functions and
> the code below just calls all of them for me.  Of course none of the
> validate code matters, cause I didn't call it here (which makes me  
> wonder
> why I bothered to post it).
>
> Somehow I doubt you are stupid :)
>
> I hope I didn't make all this sounds more complicated than it is.  All  
> I
> really wanna do is allow the users of my site to check a bunch of  
> checkboxes
> all at once for multiple records instead of opening them all  
> individually.
>
>       Thanks,
>       Nathan
>
>
>
> -----Original Message-----
> From: Mark Lowe [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, January 14, 2004 9:17 AM
> To: Struts Users Mailing List
> Subject: Re: BeanUtils.populate Invocation Error
>
> Looks complicated what are you trying to do? Sorry I'm pretty stupid
> and so i try and keep things simpler.
>
>
> On 14 Jan 2004, at 13:55, Nathan Ewing wrote:
>
>> I posted much of the form bean code at the bottom.  Aside for the two
>> arrays
>> of SoldProperty, there are a bunch of getString and setString.  This
>> is part
>> of the bean SoldProperty (aka there are two arrays of SoldProperty in
>> the
>> SoldProperty bean).
>>
>> I altered the validate code and reset code so that it does the
>> validating
>> and resetting for me, as follows:
>>
>> If there is anything else you need please let me know.
>>
>>      Nathan
>> --------------------------------------------------------------------
>>
>>      public ActionErrors validate(ActionMapping mapping,
>> HttpServletRequest request, String[] propertyList) {
>>              //Reset errors
>>              errors = new ActionErrors();
>>              
>>              
>>              ClassManager manager = new ClassManager (this);
>>              for (int a = 0; a < propertyList.length; a++){
>>                      try {
>>                              String methodName = "validate" +
>> propertyList[a];
>>                              manager.runNoArgMethod(methodName);
>>                              
>>                              } catch (NoSuchMethodException e){
>>                                      //Method Doesn't exist, Don't worry
>> about it
>>                              } catch (IllegalAccessException e){
>>                              } catch
>> (java.lang.reflect.InvocationTargetException e){}
>>
>>                      }
>>              return errors;
>>              
>>              }
>>
>>      public void reset(ActionMapping mapping, HttpServletRequest request)
>> {
>>              ClassManager manager = new ClassManager (this);
>>              for (int a = 0; a < DataMembers.length; a++){
>>                      try {
>>                              String methodName = "set" + DataMembers[a];
>>                              Class[] argTypes = {String.class};
>>                              Object[] args = {null};
>>                              manager.runMethod(methodName, argTypes,
>> args);                               
>>                              
>>                              } catch (NoSuchMethodException e){
>>                                      //Method Doesn't exist, Don't worry
>> about it
>>                              } catch (IllegalAccessException e){
>>                              } catch
>> (java.lang.reflect.InvocationTargetException e){}
>>
>>                      }
>>      
>>              }
>>
>>
>> -----Original Message-----
>> From: Mark Lowe [mailto:[EMAIL PROTECTED]
>> Sent: Wednesday, January 14, 2004 4:12 AM
>> To: Struts Users Mailing List
>> Subject: Re: BeanUtils.populate Invocation Error
>>
>> I had a similar problem yesterday with multiple selected select menus.
>> What does your form bean look like and then your nested beans.
>>
>>
>>
>> On 14 Jan 2004, at 03:57, Nathan Ewing wrote:
>>
>>> I have a jsp page with a form on it using indexed properties.  I have
>>> a bean
>>> with an array of beans that I use to connect with the jsp page.  The
>>> page
>>> displays fine, but when I try to save it, I get the following error:
>>>
>>> javax.servlet.ServletException: BeanUtils.populate
>>>     at
>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
>>>     at
>>> org.apache.struts.action.RequestProcessor.processPopulate(RequestProc 
>>> e
>>> s
>>> sor.j
>>> ava:821)
>>>     at
>>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja 
>>> v
>>> a
>>> :254)
>>>     at
>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:
>>> 1482)
>>>     at
>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.invokeServletService(St 
>>> a
>>> n
>>> dardW
>>> rapperValve.java:720)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.access$000(StandardWrap 
>>> p
>>> e
>>> rValv
>>> e.java:118)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve$1.run(StandardWrapperVa 
>>> l
>>> v
>>> e.jav
>>> a:278)
>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV 
>>> a
>>> l
>>> ve.ja
>>> va:274)
>>>     at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav 
>>> a
>>> :
>>> 505)
>>>     at
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV 
>>> a
>>> l
>>> ve.ja
>>> va:212)
>>>     at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav 
>>> a
>>> :
>>> 505)
>>>     at
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j 
>>> a
>>> v
>>> a:203
>>> )
>>>     at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav 
>>> a
>>> :
>>> 505)
>>>     at
>>> com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProce 
>>> s
>>> s
>>> or.ja
>>> va:157)
>>>     at com.iplanet.ias.web.WebContainer.service(WebContainer.java:598)
>>>
>>>
>>> Root Cause
>>>
>>> java.lang.reflect.InvocationTargetException
>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>     at
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. 
>>> j
>>> a
>>> va:39
>>> )
>>>     at
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
>>> s
>>> o
>>> rImpl
>>> .java:25)
>>>     at java.lang.reflect.Method.invoke(Method.java:324)
>>>     at
>>> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Propert 
>>> y
>>> U
>>> tils.
>>> java:493)
>>>     at
>>> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Propert 
>>> y
>>> U
>>> tils.
>>> java:428)
>>>     at
>>> org.apache.commons.beanutils.PropertyUtils.getNestedProperty(Property 
>>> U
>>> t
>>> ils.j
>>> ava:770)
>>>     at
>>> org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils. 
>>> j
>>> a
>>> va:80
>>> 1)
>>>     at
>>> org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java: 
>>> 881)
>>>     at
>>> org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
>>>     at
>>> org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
>>>     at
>>> org.apache.struts.action.RequestProcessor.processPopulate(RequestProc 
>>> e
>>> s
>>> sor.j
>>> ava:821)
>>>     at
>>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja 
>>> v
>>> a
>>> :254)
>>>     at
>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:
>>> 1482)
>>>     at
>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.invokeServletService(St 
>>> a
>>> n
>>> dardW
>>> rapperValve.java:720)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.access$000(StandardWrap 
>>> p
>>> e
>>> rValv
>>> e.java:118)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve$1.run(StandardWrapperVa 
>>> l
>>> v
>>> e.jav
>>> a:278)
>>>     at java.security.AccessController.doPrivileged(Native Method)
>>>     at
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV 
>>> a
>>> l
>>> ve.ja
>>> va:274)
>>>     at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav 
>>> a
>>> :
>>> 505)
>>>     at
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV 
>>> a
>>> l
>>> ve.ja
>>> va:212)
>>>     at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav 
>>> a
>>> :
>>> 505)
>>>     at
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j 
>>> a
>>> v
>>> a:203
>>> )
>>>     at
>>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav 
>>> a
>>> :
>>> 505)
>>>     at
>>> com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProce 
>>> s
>>> s
>>> or.ja
>>> va:157)
>>>     at com.iplanet.ias.web.WebContainer.service(WebContainer.java:598)
>>> Caused by: java.lang.NullPointerException
>>>     at
>>> com.mysite.bean.SoldProperty.getExclusiveSold(SoldProperty.java:573)
>>>
>>>
>>> Here is the relevant code:
>>>
>>>
>>>     protected SoldProperty[] ExclusiveSold; 
>>>     protected SoldProperty[] BuyerSold;     
>>>
>>> /**
>>>     Set the Value of ExclusiveSold to ExclusiveSoldValue
>>>     
>>>     @param   ExclusiveSoldValue The value of the variable ExclusiveSold
>>> in the Object
>>>     */
>>>     public void setExclusiveSold (SoldProperty[] ExclusiveSoldValue) {
>>>             ExclusiveSold = ExclusiveSoldValue;
>>>             }
>>>     /**
>>>     Get the Value of ExclusiveSold
>>>     
>>>     @return The Value of ExclusiveSold
>>>     */
>>>     public SoldProperty[] getExclusiveSold (){
>>>             return ExclusiveSold;
>>>             }       
>>>     
>>>     /**
>>>     Set the Value of ExclusiveSold to ExclusiveSoldValue
>>>     
>>>     @param   ExclusiveSoldValue The value of the variable ExclusiveSold
>>> in the Object
>>>     */
>>>     public void setExclusiveSold (int index, SoldProperty
>>> ExclusiveSoldValue) {
>>>             ExclusiveSold[index] = ExclusiveSoldValue;
>>>             }
>>>     /**
>>>     Get the Value of ExclusiveSold
>>>     
>>>     @return The Value of ExclusiveSold
>>>     */
>>>     public SoldProperty getExclusiveSold (int index){
>>>             return ExclusiveSold[index];
>>>             }       
>>>
>>>     
>>>     /**
>>>     Set the Value of BuyerSold to BuyerSoldValue
>>>     
>>>     @param   BuyerSoldValue The value of the variable BuyerSold in the
>>> Object
>>>     */
>>>     public void setBuyerSold (SoldProperty[] BuyerSoldValue) {
>>>             BuyerSold = BuyerSoldValue;
>>>             }
>>>     /**
>>>     Get the Value of BuyerSold
>>>     
>>>     @return The Value of BuyerSold
>>>     */
>>>     public SoldProperty[] getBuyerSold (){
>>>             return BuyerSold;
>>>             }       
>>>     
>>>     /**
>>>     Set the Value of BuyerSold to BuyerSoldValue
>>>     
>>>     @param   BuyerSoldValue The value of the variable BuyerSold in the
>>> Object
>>>     */
>>>     public void setBuyerSold (int index, SoldProperty BuyerSoldValue) {
>>>             BuyerSold[index] = BuyerSoldValue;
>>>             }
>>>     /**
>>>     Get the Value of BuyerSold
>>>     
>>>     @return The Value of BuyerSold
>>>     */
>>>     public SoldProperty getBuyerSold (int index){
>>>             return BuyerSold[index];
>>>             }       
>>>
>>> And the jsp code:
>>>
>>> <c:forEach var="exclusive" items="${SoldProperty.exclusiveSold}"
>>> varStatus="status">
>>>             <tr>
>>>                     <td bgcolor="#E0E8F5" align="center"><c:out
>>> value="${exclusive.soldDate}"/></td>
>>>                     <td bgcolor="#E0E8F5"><html-el:hidden
>>> property="exclusiveSold[${status.index}].soldId"/><a
>>> href="Marketing.app?action=edit&id=<c:out
>>> value="${exclusive.mlsNumber}"/>"><c:out
>>> value="${exclusive.streetNumber}"/>
>>> <c:out value="${exclusive.street}"/> <c:out
>>> value="${exclusive.aptNumber}"/></a></td>
>>>                     <td bgcolor="#E0E8F5" align="center"><c:out
>>> value="${exclusive.price}"/></td>
>>>                     <td bgcolor="#E0E8F5"
>>> align="center"><html-el:checkbox
>>> property="exclusiveSold[${status.index}].showListing" /></td>
>>>                     <td bgcolor="#E0E8F5"
>>> align="center"><html-el:checkbox
>>> property="exclusiveSold[${status.index}].showPrice" /></td>
>>>                     <td bgcolor="#E0E8F5"
>>> align="center"><html-el:checkbox
>>> property="exclusiveSold[${status.index}].showAptNumber" /></td>
>>>                     <td bgcolor="#E0E8F5" align="center"><html-el:text
>>> property="exclusiveSold[${status.index}].displayPrice" size="8"
>>> /></td>
>>>             </tr>
>>>             </c:forEach>
>>>
>>>
>>> <c:forEach var="buyer" items="${SoldProperty.buyerSold}"
>>> varStatus="status">
>>>             <tr>
>>>                     <td bgcolor="#E0E8F5" align="center"><c:out
>>> value="${buyer.soldDate}"/></td>
>>>                     <td bgcolor="#E0E8F5"><html-el:hidden
>>> property="buyerSold[${status.index}].soldId"/><a
>>> href="soldProperty.app?action=edit&id=<c:out
>>> value="${buyer.soldId}"/>"><c:out value="${buyer.streetNumber}"/>
>>> <c:out
>>> value="${buyer.street}"/> <c:out  
>>> value="${buyer.aptNumber}"/></a></td>
>>>                     <td bgcolor="#E0E8F5" align="center"><c:out
>>> value="${buyer.price}"/></td>
>>>                     <td bgcolor="#E0E8F5"
>>> align="center"><html-el:checkbox
>>> property="buyerSold[${status.index}].showListing" /></td>
>>>                     <td bgcolor="#E0E8F5"
>>> align="center"><html-el:checkbox
>>> property="buyerSold[${status.index}].showPrice" /></td>
>>>                     <td bgcolor="#E0E8F5"
>>> align="center"><html-el:checkbox
>>> property="buyerSold[${status.index}].showAptNumber" /></td>
>>>                     <td bgcolor="#E0E8F5" align="center"><html-el:text
>>> property="buyerSold[${status.index}].displayPrice" size="8" /></td>
>>>             </tr>
>>>             </c:forEach>
>>>
>>>
>>>
>>> Any ideas why I'm getting this error?  And how to fix it?
>>>
>>>     Thanks,
>>>     Nathan Ewing
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to