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.
> > Personally, I expected you to
> > cast it as:
> >
> > DynaValidatorForm postForm = (DynaValidatorForm)
> > form;
> >
> > Or us it as-initially defined (not casting like
> > above) and use BeanUtils
> > such as:
> > String receiver = (String) PropertyUtils.getSimpleProperty(form,
> > "receiver");
> >
> > Regards,
> > David
> >
> > -----Original Message-----
> > From: Caroline Jen [mailto:[EMAIL PROTECTED]
> > Sent: Saturday, January 03, 2004 11:04 PM
> > To: Struts Users Mailing List
> > Subject: Re: Please Help - ClassCastException
> >
> >
> > Thank you for trying to help. I have added
> > import org.apache.artimus.message.PostForm;
> > to my action class. I do not fully follow what I
> > should check in the struts-config.xml file. And
> > should I use name="postForm" with lowercase 'p' or
> > uppercase 'P'?
> >
> > In my struts-config.xml file, 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-property
> > name="title"
> > type="java.lang.String"/>
> > <form-property
> > name="postTopic"
> > type="java.lang.String"/>
> > <form-property
> > name="postBody"
> > type="java.lang.String"/>
> > </form-bean>
> >
> > and
> >
> > <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>
> >
> > Do you see any problems?
> > --- Pedro Salgado <[EMAIL PROTECTED]> wrote:
> > >
> > > On your struts config file check if the form
> > bean
> > > for StoreMessage action
> > > is of type pkg.pkg.PostForm and if the action name
> > > is pointing to the
> > > correct form bean... It also seems to be missing
> > the
> > > import of the PostForm
> > > on your action class.
> > >
> > > Pedro Salgado
> > >
> > > On 04/01/2004 03:22, "Caroline Jen"
> > > <[EMAIL PROTECTED]> wrote:
> > >
> > > > The statement shown below encountered a
> > > > ClassCastException:
> > > >
> > > > PostForm postForm = ( PostForm )form;
> > > >
> > > > I cannot figure out the reason. Please help.
> > > >
> > > > Allow me to show more code of the class where
> > the
> > > > exception occurred:
> > > >
> > > > ...
> > > >
> > > > 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.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;
> > > > int postID;
> > > > String postCreationIP;
> > > > String memberName = request.getRemoteUser();
> > > > Timestamp now =
> > > > DateUtil.getCurrentGMTTimestamp();
> > > >
> > > > parentPostID = Integer.parseInt( request.getParameter(
> > > > "parent" ) );
> > > >
> > > > PostForm postForm = ( PostForm )form;
> > > > ....
> > > > ....
> > > >
> > > > }
> > > > }
> > > >
> > > > __________________________________
> > > > Do you Yahoo!?
> > > > Find out what made the Top Yahoo! Searches of
> > 2003
> > > > http://search.yahoo.com/top2003
> > > >
> > > >
> > >
> >
> ---------------------------------------------------------------------
> > > > 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!?
> > Find out what made the Top Yahoo! Searches of 2003
> > http://search.yahoo.com/top2003
> >
> >
> ---------------------------------------------------------------------
> > 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!?
> Find out what made the Top Yahoo! Searches of 2003
http://search.yahoo.com/top2003
---------------------------------------------------------------------
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]