Caroline, May I ask why you are performing your database updates through a separate thread? It seems to be complicating your code. Creating lots of threads from within your web application is not a good practice if you want your app to scale well. Also, what happens if the update doesn't succeed? You have no way of notifying the user.
The code: <snip> ThreadBean threadBean = new ThreadBean(); String receiver = threadBean.getReceiver(); String sender = threadBean.getSender(); </snip> is your problem unless your ThreadBean constructor can populate itself correctly with the desired values. If you must use threads, then you should be able to create a ThreadHandler, call a setter method on it and set you ThreadBean instance variable, and then call the run method on the ThreadHandler to start the thread. Regards, Richard -----Original Message----- From: Caroline Jen [mailto:[EMAIL PROTECTED] Sent: Thursday, January 08, 2004 8:48 AM To: Struts Users Mailing List Subject: RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm) 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 <[EMAIL PROTECTED]> 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:[EMAIL PROTECTED] > > 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 <[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. > > > > > > > > === message truncated === __________________________________ 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]