I have narrowed down the problem.  Something went
wrong in my business tier class (ThreadHandler.java). 
All the properties in the JavaBean are populated
properly (I have checked).  The way I coded in the
ThreadHandler class failed to retrieve the value of
all the properties in the JavaBean (ThreadBean.java). 
All the values turned out to be null or 0.  Now, what
is wrong with the code?

class ThreadHandler extends ThreadBean 
{
   String receiver = getReceiver();
   String sender = getSender();
   String threadTopic = getPostTopic();
   String threadBody = getPostBody();
   Timestamp threadCreationDate =
getThreadCreationDate();
   int threadViewCount = getThreadViewCount();
   int threadReplyCount = getThreadReplyCount();
 
   .....
   .....
}

To answer your question:

1. Have you checked to make sure that the fields you
expect actually exist in the form before calling
BeanUtils.copyProperties()?

Yes, I have printed out the contents of the JSP text
fields in my action class, which is a servlet.  For
example: System.out.println( "the sender is " +
postForm.get( "sender" ) );

2. If so, have you checked to see if the data was
copied properly just after BeanUtils.copyProperties()?

Yes, I have also printed out the value of the bean
properties.  For example: System.out.println( "the
sender is " + threadBean.getSender() );

3. BeanUtils.copyProperties() uses reflection to copy
properties.  Are you using proper JavaBeans naming
convention?

Yes, I used a pair of get and set methods for each
properties in the JavaBean (ThreadBean.java).  And in
my action class, I could print out the value of those
properties.

--- Robert Taylor <[EMAIL PROTECTED]> wrote:
> Have you checked to make sure that the fields you
> expect
> actually exist in the form before calling
> BeanUtils.populate()?
> 
> If so, have you checked to see if the data was
> copied properly 
> just after BeanUtils.populate()?
> 
> BeanUtils.populate() uses reflection to copy
> properties.
> Are you usingproper JavaBeans naming convention?
> 
> Try and isolate exactly where the data is getting
> "lost".
> 
> I use BeanUtils.populate() all the time with
> DynaXXXXForms and
> have no problems. Usually when I do, I find that my
> data member
> names don't correspond.
> 
> robert
> 
> > -----Original Message-----
> > From: Caroline Jen [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, January 07, 2004 1:42 PM
> > To: [EMAIL PROTECTED]
> > Subject: All The Bean Properties Are Null in the
> Business Tier!!! (Used
> > BeanUtils to Convert DynaValidatorForm)
> > 
> > 
> > Hi, my program compiled OKay.  When I ran the
> > application, somehow, the properties of my
> > DynaValidatorForm are not passed from the action
> class
> > to the business tier and then to the data access
> tier.
> >  Please help me taking a look at what went wrong. 
>  
> > 
> > It looks that the validation worked fine: 
> > 
> > <form-bean
> >     name="postForm"
> >           
> >
>
type="org.apache.struts.validator.DynaValidatorForm">
> >        <form-property
> >             name="receiver"
> >             type="java.lang.String"/>
> >        <form-property
> >             name="sender"
> >             type="java.lang.String"/>
> >     .....
> >     .....
> > </form-bean>
> > because when I intentionally left several of the
> text
> > fields blank and submitted my JSP form, an applet
> got
> > prompted showing something in those fields are
> > required.
> > 
> > In my action class (see below),  I used BeanUtils
> to
> > copy all the properties of the DynaValidatorForm
> to a
> > bean (ThreadBean): 
> > 
> > DynaActionForm postForm = ( DynaActionForm )form;
> > ThreadBean threadBean = new ThreadBean();
> > BeanUtils.copyProperties( threadBean, postForm );
> > 
> > I then added a number of properties with
> pre-defined
> > values to the ThreadBean in the Action class:
> > 
> > Timestamp now = DateUtil.getCurrentGMTTimestamp();
> > threadBean.setThreadCreationDate( now );
> > threadBean.setThreadViewCount( 0 );
> > 
> > I then called a method in a service class
> > ThreadHandler and passing threadBean as the
> parameter
> > of that method:
> > 
> > ThreadHandler thandler = new ThreadHandler();
> > threadID = thandler.insertThread( threadBean );
> > 
> > In the ThreadHandler class (see below), I first
> tried
> > to retrieve the values of those properties from
> the
> > ThreadBean.  I FOUND OUT ALL THOSE VALUES ARE
> NULL!
> > 
> > class ThreadHandler extends ThreadBean 
> > {
> >    int threadID = getThreadID();
> >    String receiver = getReceiver();
> >    String sender = getSender();
> >    Timestamp threadCreationDate =
> > getThreadCreationDate();
> >    int threadViewCount = getThreadViewCount();
> > 
> >    public ThreadHandler() {}
> > 
> >    MessageDAO md = new MySQLMessageDAO();
> > 
> >    public int insertThread( ThreadBean threadBean
> )
> >                             throws
> > MessageDAOSysException, ObjectNotFoundException
> >    {
> >       md.createThread( receiver, sender,   
> >                    threadCreationDate,
> threadViewCount
> > );
> > 
> >       .....
> >       .....
> > 
> >       return threadID;
> >    }
> > }
> > 
> > 
> > 
> > 
> > 
> > __________________________________
> > Do you Yahoo!?
> > Yahoo! Hotjobs: Enter the "Signing Bonus"
> Sweepstakes
> > http://hotjobs.sweepstakes.yahoo.com/signingbonus
> > 
> >
>
---------------------------------------------------------------------
> > 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]
> 


__________________________________
Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
http://hotjobs.sweepstakes.yahoo.com/signingbonus

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

Reply via email to