Not at all.

First off, set(String, String) is predefined for you. You don't need to 
create any of that. In fact, what you will find in a DynaValidatorForm is 
that your form classes start to get very sparse. Here's really what it could 
look like.


public class PostForm extends BaseDynaForm {


  public void reset(ActionMapping actionMapping, HttpServletRequest 
httpServletRequest) {
        // throw new UnsupportedOperationException("Method is not 
implemented");
        }

    public PostForm () {
   }


}

In your ActionForm itself, beanUtils would work something like this. All you 
need is to get the right formBean object. 

  public ActionForward  execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request, HttpServletResponse response) throws Exception {

                PostForm pForm = (PostForm) form;

               // other code you write here

                BeanUtils.copyProperties(yourBean, pForm);

// etc

Doing it yourself without beanUtils?

Instead of calling getSender() and having a String returned, you call get
("sender") and it will return an Object (cast it yourself to whatever type 
the sender form property really is). I made a base form class with a 
getString method that calls get() and does the String cast for me to save the 
tediom.

Making sense now?

> -----Original Message-----
> From: Caroline Jen [mailto:[EMAIL PROTECTED] 
> Sent: Sunday, January 04, 2004 2:46 AM
> To: Struts Users Mailing List
> Subject: RE: Please Help - ClassCastException
> 
> 
> 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]




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

Reply via email to