I am still confused...

I have a jsp that provides text fields for user to
fill out information.  All the information is passed
via HttpRequest and to be validated.  And all the
properties in my PostForm are populated by the
information retrieved from those text fields.

And my PostForm is of
type="org.apache.struts.validator.DynaValidatorForm">

Therefore, in my PostForm.java, I should do something
like this?  I just do not think the following code is
correct.

======================================================
import org.apache.struts.validator.DynaValidatorForm;

public class PostForm extends DynaValidatorForm  {
 
    private String receiver;
    private String sender;
    
    public void set(String receiver, String receiver);
    public void set(String sender, String sender); 
    public String get(String receiver, String
receiver);
    public String get(String sender, String sender); 
}
======================================================
And you are saying that in my action class, I should

.......
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;

import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.artimus.message.PostForm;
import org.apache.artimus.message.PostBean;
import org.apache.artimus.message.ThreadBean;
import org.apache.artimus.message.utility.DateUtil;

public final class StoreMessage extends Action
{
   public ActionForward execute(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest
 request, 
                                HttpServletResponse
 response)
        throws Exception 
   {
 
      int parentPostID;
      int threadID;
      String memberName = request.getRemoteUser();
      Timestamp now =
 DateUtil.getCurrentGMTTimestamp();
      parentPostID = Integer.parseInt(
 request.getParameter( "parent" ) );
 
      ActionForm postForm = ( ActionForm )form;
 
      ThreadHandler thandler = new ThreadHandler();

      ThreadBean threadBean = new ThreadBean();
      BeanUtils.copyProperties( threadBean, postForm
);

      if (parentPostID == 0 ) // new topic
      {
         threadBean.setLastPostMemberName( memberName
);
         threadBean.setThreadCreationDate( now );
         .........
         .........
  
         threadID = thandler.insertThread( threadBean
);
 
      }
   .......
   .......
   }
}

--- Joe Hertz <[EMAIL PROTECTED]> wrote:
> Well, first off:
> 
> In your (dyna) form, you don't create setters and
> getters for the properties 
> though. With DynaForms you would say
> set("myPropertyName", "myString") 
> instead of calling setMyPropertyName("myString").
> This is the Dyna part of 
> DynaForms. It's much less tedious IMHO.
> 
> In your action, you absolutely want to cast the form
> to PostForm. Otherwise 
> the form variable has no way to know properties are
> associated with it. So 
> yes, once you cast it to PostForm calls to
> BeanUtils.copyProperties() can and 
> will work properly.
> 
> Hope this helps,
> 
> -Joe
> 
> 
> 
> > -----Original Message-----
> > From: Caroline Jen [mailto:[EMAIL PROTECTED] 
> > Sent: Sunday, January 04, 2004 1:42 AM
> > To: Struts Users Mailing List
> > Subject: RE: Please Help - ClassCastException
> > 
> > 
> > I think that there are a lot more mistakes in my
> code
> > than I originally thought.  The root of the
> problem is
> > that I do not know how to use DynaValidatorForm. 
> If
> > you could help me in learning how to code when I
> am
> > working with DynaValidatorForm.  
> > 
> > 1. in my struts-config.xml, I have:
> > 
> >      <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>
> > 
> > 2. My PostForm.java is like:
> > 
> > import
> org.apache.struts.validator.DynaValidatorForm;
> > import org.apache.struts.action.ActionMapping;
> >  
> > public class PostForm extends DynaValidatorForm  {
> >  
> >     private String receiver;
> >     private String sender;
> >     ......
> >     
> >     public void setReceiver( String receiver )
> >     {
> >         this.receiver = receiver;
> >     }
> >     public void setSender( String sender ) 
> >     {
> >         this.sender = sender;
> >     }
> >     public String getReceiver() 
> >     {
> >         return receiver;
> >     }
> >     public String getSender() 
> >     {
> >         return sender;
> >     }
> >     .....
> >     .....
> > }
> > 
> > 3. in my action class (see the code below)
> > 
> > 3.1. do I cast the form to DynaActionForm? or I
> should
> > cast the form to DynaValidatorForm?
> > 
> > 3.2. Can I use the copyProperties() method of the
> > BeanUtils to convert the form to a bean?
> > 
> >    BeanUtils.copyProperties( threadBean, postForm
> );
> > 
> > .......
> > import org.apache.struts.action.Action;
> > import org.apache.struts.action.ActionForward;
> > import org.apache.struts.action.ActionMapping;
> > import org.apache.struts.action.ActionForm;
> > import org.apache.struts.action.DynaActionForm;
> > import org.apache.commons.beanutils.BeanUtils;
> > import javax.servlet.http.HttpServletRequest;
> > import javax.servlet.http.HttpServletResponse;
> > 
> > import org.apache.artimus.message.PostForm;
> > import org.apache.artimus.message.PostBean;
> > import org.apache.artimus.message.ThreadBean;
> > import
> org.apache.artimus.message.utility.DateUtil;
> > 
> > public final class StoreMessage extends Action
> > {
> >    public ActionForward execute(ActionMapping
> mapping,
> >                                 ActionForm form,
> >                                 HttpServletRequest
> > request,
> >                                
> HttpServletResponse
> > response)
> >         throws Exception 
> >    {
> > 
> >       int parentPostID;
> >       int threadID;
> >       String memberName = request.getRemoteUser();
> >       Timestamp now =
> > DateUtil.getCurrentGMTTimestamp();
> >       parentPostID = Integer.parseInt(
> > request.getParameter( "parent" ) );
> > 
> >       DynaActionForm postForm = ( DynaActionForm
> > )form;
> > 
> >       ThreadHandler thandler = new
> ThreadHandler();
> > 
> >       ThreadBean threadBean = new ThreadBean();
> >       BeanUtils.copyProperties( threadBean,
> postForm
> > );
> > 
> >       if (parentPostID == 0 ) // new topic
> >       {
> >          threadBean.setLastPostMemberName(
> memberName
> > );
> >          threadBean.setThreadCreationDate( now );
> >          .........
> >          .........
> >  
> >          threadID = thandler.insertThread(
> threadBean
> > );
> > 
> >       }
> >    .......
> >    .......
> >    }
> > }
> > 
> > 4. the action mapping in my struts-config.xml is
> like:
> >     <action
> >         roles="administrator,editor,contributor"
> >         path="/message/NewTopic"
> >        
> type="org.apache.artimus.message.StoreMessage"
> >         name="postForm"
> >         scope="request"
> >         validate="true"
> >         input=".message.Form">
> >        <forward
> >             name="success"
> >             path=".article.View"/>
> >     </action>
> > 
> > Thank you.
> > --- David Friedman <[EMAIL PROTECTED]> wrote:
> > > Here is what I see (opinions vary)...
> > > 
> > > I see you are defining your form bean in your
> struts-config.xml as 
> > > type
> 'org.apache.struts.validator.DynaValidatorForm'. So,
> > > why are you trying to
> > > cast it as this
> > > 'org.apache.artimus.message.PostForm' class. 
> Does
> > > that
> > > class extend DynaValidatorForm?  If it doesn't,
> > > you'll get a
> > > ClassCastException like you're getting now.  
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
New Yahoo! Photos - easier uploading and sharing.
http://photos.yahoo.com/

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

Reply via email to