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(RequestProce 
>> s
>> sor.j
>> ava:821)
>>      at
>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.jav 
>> 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(Sta 
>> n
>> dardW
>> rapperValve.java:720)
>>      at
>> org.apache.catalina.core.StandardWrapperValve.access$000(StandardWrapp 
>> e
>> rValv
>> e.java:118)
>>      at
>> org.apache.catalina.core.StandardWrapperValve$1.run(StandardWrapperVal 
>> v
>> e.jav
>> a:278)
>>      at java.security.AccessController.doPrivileged(Native Method)
>>      at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa 
>> l
>> ve.ja
>> va:274)
>>      at
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :
>> 505)
>>      at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa 
>> l
>> ve.ja
>> va:212)
>>      at
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :
>> 505)
>>      at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja 
>> v
>> a:203
>> )
>>      at
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :
>> 505)
>>      at
>> com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProces 
>> 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(DelegatingMethodAccess 
>> o
>> rImpl
>> .java:25)
>>      at java.lang.reflect.Method.invoke(Method.java:324)
>>      at
>> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Property 
>> U
>> tils.
>> java:493)
>>      at
>> org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Property 
>> U
>> tils.
>> java:428)
>>      at
>> org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyU 
>> 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(RequestProce 
>> s
>> sor.j
>> ava:821)
>>      at
>> org.apache.struts.action.RequestProcessor.process(RequestProcessor.jav 
>> 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(Sta 
>> n
>> dardW
>> rapperValve.java:720)
>>      at
>> org.apache.catalina.core.StandardWrapperValve.access$000(StandardWrapp 
>> e
>> rValv
>> e.java:118)
>>      at
>> org.apache.catalina.core.StandardWrapperValve$1.run(StandardWrapperVal 
>> v
>> e.jav
>> a:278)
>>      at java.security.AccessController.doPrivileged(Native Method)
>>      at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa 
>> l
>> ve.ja
>> va:274)
>>      at
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :
>> 505)
>>      at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa 
>> l
>> ve.ja
>> va:212)
>>      at
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :
>> 505)
>>      at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja 
>> v
>> a:203
>> )
>>      at
>> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java 
>> :
>> 505)
>>      at
>> com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProces 
>> 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]

Reply via email to