RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
Glad it worked for you. robert > -Original Message- > From: Caroline Jen [mailto:[EMAIL PROTECTED] > Sent: Friday, January 09, 2004 5:12 PM > To: Struts Users Mailing List > Subject: RE: All The Bean Properties Are Null in the Business Tier!!! > (Used BeanUtils to Convert DynaValidatorForm) > > > Robert, I followed your advices. Your code works > very well. I have successfully inserted all the > values of my bean properties into the database. Thank > you very much. > --- Robert Taylor <[EMAIL PROTECTED]> wrote: > > The same problem exists, you are calling getters on > > a ThreadBean instance > > which has not yet been populated. > > > > > > Below three ways to accomplish your goal: > > > > METHOD 1: > > Try this (proxy): > > > > public final class ThreadHandler { > > > > MessageDAO md = new MySQLMessageDAO(); > > > > public int insertThread(ThreadBean bean) > > throws throws MessageDAOSysException, > > ObjectNotFoundException { > > > > int identity = 0; > > > > md.createThread(bean.getReceiver(), > > bean.getSender(), > > bean.getThreadTopic(), > > bean.getThreadBody(), > > bean.getThreadCreationDate(), > > bean.getThreadViewCount(), > > bean.getThreadReplyCount()); > > > > // get identity > > > > return identity; > > > > } > > > > > > } > > > > ThreadBean bean = new ThreadBean(); > > BeanUtils.copyProperties(bean, postForm); > > ThreadHandler th = new ThreadHandler() > > th.insertThread(bean); > > > > If you do it this way, then it would be better if > > ThreadHandler was a > > singleton, > > but that's a different discussion :) > > > > > > > > > > METHOD 2: > > Another way to do it (design by composition). > > > > public final class ThreadHandler { > > > > MessageDAO md = new MySQLMessageDAO(); > > ThreadBean bean; > > > > public ThreadHandler(ThreadBean bean) { > > > >this.bean = bean; > > > > } > > public int insertThread() > > throws throws MessageDAOSysException, > > ObjectNotFoundException { > > > > int identity = 0; > > > > md.createThread(bean.getReceiver(), > > bean.getSender(), > > bean.getThreadTopic(), > > bean.getThreadBody(), > > bean.getThreadCreationDate(), > > bean.getThreadViewCount(), > > bean.getThreadReplyCount()); > > > > // get identity > > > > return identity; > > > > } > > > > > > } > > > > ThreadBean bean = new ThreadBean(); > > BeanUtils.copyProperties(bean, postForm); > > ThreadHandler th = new ThreadHandler(bean) > > th.insertThread(); > > > > > > METHOD 3: > > Yet another way via classic inheritance: > > > > public final class ThreadHandler > > extends ThreadBean { > > > > MessageDAO md = new MySQLMessageDAO(); > > > > > > public ThreadHandler() { > > > > super(); > > > > } > > public int insertThread() > > throws throws MessageDAOSysException, > > ObjectNotFoundException { > > > > int identity = 0; > > > > md.createThread(this.getReceiver(), > > this.getSender(), > > this.getThreadTopic(), > > this.getThreadBody(), > > this.getThreadCreationDate(), > > this.getThreadViewCount(), > > this.getThreadReplyCount()); > > > > // get identity > > > > return identity; > > > > } > > > > > > } > > > > ThreadHandler th = new ThreadHandler(); > > BeanUtils.copyProperties(th, postForm); > > th.insertThread(); > > > > > > > > hth, > > > > robert > > > > > > > -Original Message- > > > From: Caroline Jen [mailto:[EMAIL PROTECTED] > > > Sent: Thursday, January 08, 2004 11:48 AM > > > To: Struts Users Mailing List > > > Subject: R
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
Robert, I followed your advices. Your code works very well. I have successfully inserted all the values of my bean properties into the database. Thank you very much. --- Robert Taylor <[EMAIL PROTECTED]> wrote: > The same problem exists, you are calling getters on > a ThreadBean instance > which has not yet been populated. > > > Below three ways to accomplish your goal: > > METHOD 1: > Try this (proxy): > > public final class ThreadHandler { > > MessageDAO md = new MySQLMessageDAO(); > > public int insertThread(ThreadBean bean) > throws throws MessageDAOSysException, > ObjectNotFoundException { > > int identity = 0; > > md.createThread(bean.getReceiver(), > bean.getSender(), > bean.getThreadTopic(), > bean.getThreadBody(), > bean.getThreadCreationDate(), > bean.getThreadViewCount(), > bean.getThreadReplyCount()); > > // get identity > > return identity; > > } > > > } > > ThreadBean bean = new ThreadBean(); > BeanUtils.copyProperties(bean, postForm); > ThreadHandler th = new ThreadHandler() > th.insertThread(bean); > > If you do it this way, then it would be better if > ThreadHandler was a > singleton, > but that's a different discussion :) > > > > > METHOD 2: > Another way to do it (design by composition). > > public final class ThreadHandler { > > MessageDAO md = new MySQLMessageDAO(); > ThreadBean bean; > > public ThreadHandler(ThreadBean bean) { > >this.bean = bean; > > } > public int insertThread() > throws throws MessageDAOSysException, > ObjectNotFoundException { > > int identity = 0; > > md.createThread(bean.getReceiver(), > bean.getSender(), > bean.getThreadTopic(), > bean.getThreadBody(), > bean.getThreadCreationDate(), > bean.getThreadViewCount(), > bean.getThreadReplyCount()); > > // get identity > > return identity; > > } > > > } > > ThreadBean bean = new ThreadBean(); > BeanUtils.copyProperties(bean, postForm); > ThreadHandler th = new ThreadHandler(bean) > th.insertThread(); > > > METHOD 3: > Yet another way via classic inheritance: > > public final class ThreadHandler > extends ThreadBean { > > MessageDAO md = new MySQLMessageDAO(); > > > public ThreadHandler() { > > super(); > > } > public int insertThread() > throws throws MessageDAOSysException, > ObjectNotFoundException { > > int identity = 0; > > md.createThread(this.getReceiver(), > this.getSender(), > this.getThreadTopic(), > this.getThreadBody(), > this.getThreadCreationDate(), > this.getThreadViewCount(), > this.getThreadReplyCount()); > > // get identity > > return identity; > > } > > > } > > ThreadHandler th = new ThreadHandler(); > BeanUtils.copyProperties(th, postForm); > th.insertThread(); > > > > hth, > > robert > > > > -Original Message- > > From: Caroline Jen [mailto:[EMAIL PROTECTED] > > Sent: Thursday, January 08, 2004 11: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 th
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
Robert, you are absolutely right. I am trying to build a personal message inbox using Struts. I use the word "Thread" to represent a discussion topic. My ThreadHandler is a business tier class. The word Thread has nothing to do with the java.lang.Thread. -Caroline --- Robert Taylor <[EMAIL PROTECTED]> wrote: > I don't think ThreadHandler represents a > java.lang.Thread handler. > I think it more or less is a business object to > facilitate persistance. > I think the use of the word "Thread" here is more > representative of a > forum discussion thread. > > I could be wrong though. > > robert > > > > -Original Message- > > From: Yee, Richard K,,DMDCWEST > [mailto:[EMAIL PROTECTED] > > Sent: Thursday, January 08, 2004 12:00 PM > > To: 'Struts Users Mailing List' > > Subject: RE: All The Bean Properties Are Null in > the Business Tier!!! > > (Used BeanUtils to Convert DynaValidatorForm) > > > > > > 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: > > > >ThreadBean threadBean = new ThreadBean(); > > > >String receiver = threadBean.getReceiver(); > >String sender = threadBean.getSender(); > > > > > > 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]&g
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
I don't think ThreadHandler represents a java.lang.Thread handler. I think it more or less is a business object to facilitate persistance. I think the use of the word "Thread" here is more representative of a forum discussion thread. I could be wrong though. robert > -Original Message- > From: Yee, Richard K,,DMDCWEST [mailto:[EMAIL PROTECTED] > Sent: Thursday, January 08, 2004 12:00 PM > To: 'Struts Users Mailing List' > Subject: RE: All The Bean Properties Are Null in the Business Tier!!! > (Used BeanUtils to Convert DynaValidatorForm) > > > 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: > >ThreadBean threadBean = new ThreadBean(); > >String receiver = threadBean.getReceiver(); >String sender = threadBean.getSender(); > > > 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: > > > > > > &g
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
The same problem exists, you are calling getters on a ThreadBean instance which has not yet been populated. Below three ways to accomplish your goal: METHOD 1: Try this (proxy): public final class ThreadHandler { MessageDAO md = new MySQLMessageDAO(); public int insertThread(ThreadBean bean) throws throws MessageDAOSysException, ObjectNotFoundException { int identity = 0; md.createThread(bean.getReceiver(), bean.getSender(), bean.getThreadTopic(), bean.getThreadBody(), bean.getThreadCreationDate(), bean.getThreadViewCount(), bean.getThreadReplyCount()); // get identity return identity; } } ThreadBean bean = new ThreadBean(); BeanUtils.copyProperties(bean, postForm); ThreadHandler th = new ThreadHandler() th.insertThread(bean); If you do it this way, then it would be better if ThreadHandler was a singleton, but that's a different discussion :) METHOD 2: Another way to do it (design by composition). public final class ThreadHandler { MessageDAO md = new MySQLMessageDAO(); ThreadBean bean; public ThreadHandler(ThreadBean bean) { this.bean = bean; } public int insertThread() throws throws MessageDAOSysException, ObjectNotFoundException { int identity = 0; md.createThread(bean.getReceiver(), bean.getSender(), bean.getThreadTopic(), bean.getThreadBody(), bean.getThreadCreationDate(), bean.getThreadViewCount(), bean.getThreadReplyCount()); // get identity return identity; } } ThreadBean bean = new ThreadBean(); BeanUtils.copyProperties(bean, postForm); ThreadHandler th = new ThreadHandler(bean) th.insertThread(); METHOD 3: Yet another way via classic inheritance: public final class ThreadHandler extends ThreadBean { MessageDAO md = new MySQLMessageDAO(); public ThreadHandler() { super(); } public int insertThread() throws throws MessageDAOSysException, ObjectNotFoundException { int identity = 0; md.createThread(this.getReceiver(), this.getSender(), this.getThreadTopic(), this.getThreadBody(), this.getThreadCreationDate(), this.getThreadViewCount(), this.getThreadReplyCount()); // get identity return identity; } } ThreadHandler th = new ThreadHandler(); BeanUtils.copyProperties(th, postForm); th.insertThread(); hth, robert > -Original Message- > From: Caroline Jen [mailto:[EMAIL PROTECTED] > Sent: Thursday, January 08, 2004 11: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, >threadRep
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(); > >Str
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
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 > > DynaForms 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 > > &
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 > DynaForms 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: > > > > > name="postForm" > > > > > type="org.apache.struts.validator.DynaValidatorForm"> > > > name="receiver" > > type="java.lang.String"/> > > > name="sender" > > type="java.lang.String"/> > > . > > . > > > > 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
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
Sorry, I mean copyProperties(). You can find the differences defined below: http://jakarta.apache.org/commons/beanutils/api/org/apache/commons/beanutils /BeanUtils.html#copyProperties(java.lang.Object, java.lang.Object) http://jakarta.apache.org/commons/beanutils/api/org/apache/commons/beanutils /BeanUtils.html#populate(java.lang.Object, java.util.Map) robert > -Original Message- > From: Caroline Jen [mailto:[EMAIL PROTECTED] > Sent: Wednesday, January 07, 2004 2:13 PM > To: Struts Users Mailing List > Subject: RE: All The Bean Properties Are Null in the Business Tier!!! > (Used BeanUtils to Convert DynaValidatorForm) > > > What does BeanUtils.populate(); do? I used > BeanUtils.copyProperties(); > Does it make any difference? > > --- 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 > > DynaForms 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: > > > > > > > > name="postForm" > > > > > > > > > type="org.apache.struts.validator.DynaValidatorForm"> > > > > > name="receiver" > > > type="java.lang.String"/> > > > > > name="sender" > > > type="java.lang.String"/> > > > . > > > . > > > > > > 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() {} > > > >
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
What does BeanUtils.populate(); do? I used BeanUtils.copyProperties(); Does it make any difference? --- 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 > DynaForms 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: > > > > > name="postForm" > > > > > type="org.apache.struts.validator.DynaValidatorForm"> > > > name="receiver" > > type="java.lang.String"/> > > > name="sender" > > type="java.lang.String"/> > > . > > . > > > > 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]
RE: All The Bean Properties Are Null in the Business Tier!!! (Used BeanUtils to Convert DynaValidatorForm)
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 DynaForms 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: > > name="postForm" > > type="org.apache.struts.validator.DynaValidatorForm"> > name="receiver" > type="java.lang.String"/> > name="sender" > type="java.lang.String"/> > . > . > > 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]
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: . . 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]