I've never tried putting a bean in a bean and then referring to itself, does the java stuff that can sniff bean properties deal with that.

The refraction or reflection stuff that bean utils does.



On 14 Jan 2004, at 15:24, Nathan Ewing wrote:

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(RequestPro c
e
s
sor.j
ava:821)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.j a
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(S t
a
n
dardW
rapperValve.java:720)
at
org.apache.catalina.core.StandardWrapperValve.access$000(StandardWra p
p
e
rValv
e.java:118)
at
org.apache.catalina.core.StandardWrapperValve$1.run(StandardWrapperV a
l
v
e.jav
a:278)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapper V
a
l
ve.ja
va:274)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.ja v
a
:
505)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContext V
a
l
ve.ja
va:212)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.ja v
a
:
505)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve. j
a
v
a:203
)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.ja v
a
:
505)
at
com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProc e
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(DelegatingMethodAcce s
s
o
rImpl
.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Proper t
y
U
tils.
java:493)
at
org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(Proper t
y
U
tils.
java:428)
at
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(Propert y
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(RequestPro c
e
s
sor.j
ava:821)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.j a
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(S t
a
n
dardW
rapperValve.java:720)
at
org.apache.catalina.core.StandardWrapperValve.access$000(StandardWra p
p
e
rValv
e.java:118)
at
org.apache.catalina.core.StandardWrapperValve$1.run(StandardWrapperV a
l
v
e.jav
a:278)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapper V
a
l
ve.ja
va:274)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.ja v
a
:
505)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContext V
a
l
ve.ja
va:212)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.ja v
a
:
505)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve. j
a
v
a:203
)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.ja v
a
:
505)
at
com.iplanet.ias.web.connector.nsapi.NSAPIProcessor.process(NSAPIProc e
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]



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



Reply via email to