struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Caroline Jen <jiapei_...@yahoo.com>
Subject RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
Date Thu, 08 Jan 2004 16:47:43 GMT
Thank you for your comment, which is very helpful.

Instead of extends ThreadBean, I now import the
ThreadBean into my ThreadHandler class (see the code
below). I am still getting all null or zero values
from the bean.

What is the proper way to do it?  I simply want to
insert the value of all the properties into the
database.  Most of the fields in my database require
NOT NULL.  

code:
==================================================
import org.apache.artimus.message.ThreadBean;

class ThreadHandler 
{
   ThreadBean threadBean = new ThreadBean();  

   String receiver = threadBean.getReceiver();
   String sender = threadBean.getSender();
   String threadTopic = threadBean.getPostTopic();
   String threadBody = threadBean.getPostBody();
   Timestamp threadCreationDate =
threadBean.getThreadCreationDate();
   int threadViewCount =
threadBean.getThreadViewCount();
   int threadReplyCount =
threadBean.getThreadReplyCount();

   MessageDAO md = new MySQLMessageDAO();
   public int insertThread( ThreadBean threadBean )
                        throws MessageDAOSysException,

                               ObjectNotFoundException

   {
      System.out.println( "The sender is " + sender +
"." );  
      System.out.println( "The subject is " +
threadTopic + "." );
      System.out.println( "The creation date is " +
threadCreationDate );
      System.out.println( "The number of replies are "
+ threadReplyCount );

      md.createThread( receiver, sender, threadTopic, 
                       threadBody, threadCreationDate,

                       threadViewCount,   
                       threadReplyCount ); 

      int threadID = 0;
      ..... 
      .....
      return threadID;
   }
} 


--- Robert Taylor <rtaylor@mulework.com> wrote:
> Your code seems a bit confusing based upon what you
> want to
> achieve.
> 
> If indeed you want ThreadHandler to inherit from
> ThreadBean,
> you should be able to do something like this:
> 
> DynaActionForm postForm = ( DynaActionForm )form;
> ThreadHander = new ThreadHandler();
> BeanUtils.copyProperties( threadHandler, postForm );
> 
> threadHandler.insertThread();
> 
> 
> The reason you are getting null and zero values in
> ThreadHandler
> is that you are populating a new instance of
> ThreadBean  here:
> 
> > > > DynaActionForm postForm = ( DynaActionForm
> )form;
> > > > ThreadBean threadBean = new ThreadBean();
> > > > BeanUtils.copyProperties( threadBean, postForm
> );
> 
> ... and then you get a new instance of ThreadHandler
> here:
> 
> > > > ThreadHandler thandler = new ThreadHandler();
> 
> At this point, ThreadHandler knows nothing of your
> populated
> instance of ThreadBean. Instead it is getting values
> from
> its own "empty" ThreadBean parent here:
> 
> > 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();
> >
> >    .....
> >    .....
> > }
> 
> 
> ...unless you do something like the following in
> ThreadHandler.insertThread():
> 
> public int insertThread(ThreadBean bean) throws
> SomeException {
> 
>       this.receiver = bean.getReceiver();
>       this.sender = bean.getSender();
>       ....
> 
>       // insert code here
> 
> 
> 
> }
> 
> which from a design perspective, I'm not sure why
> you would want to do it
> this way.
> 
> 
> hth,
> 
> robert
> 
> 
> > -----Original Message-----
> > From: Caroline Jen [mailto:jiapei_jen@yahoo.com]
> > Sent: Wednesday, January 07, 2004 10:27 PM
> > To: Struts Users Mailing List
> > Subject: RE: All The Bean Properties Are Null in
> the Business Tier!!!
> > (Used BeanUtils to Convert DynaValidatorForm)
> >
> >
> > 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 <rtaylor@mulework.com> 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:jiapei_jen@yahoo.com]
> > > > Sent: Wednesday, January 07, 2004 1:42 PM
> > > > To: struts-user@jakarta.apache.org
> > > > 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.
> > >
> > > >
> 
=== message truncated ===


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

---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


Mime
View raw message