As far as I can tell, there really isn't any support for prepopulating a
DynaActionForm.  The ff is from
http://jakarta.apache.org/struts/userGuide/building_controller.html#dyna_action_form_classes

"DynaActionForms are not a drop-in replacement for ActionForms. If you need
to access ActionForm properties in your Action, you will need to use the
map-style accessor, like myForm.get("name"). If you actively use the
ActionForm object in your Action, then you may want to use conventional
ActionForms instead. 

"DynaActionForms cannot be instantiated using a no-argument constructor. In
order to simulate the extra properties, there is a lot of machinery involved
in their construction. You must rely on Struts to instantiate a
DynaActionForm for you, via the ActionMapping."

What I did was copy the code that RequestUtils uses to instantiate a
DynaActionForm, and put it in a method that I can call like this:
DynaActionForm dynaForm = createDynaActionForm("formName",
mapping.getModuleConfig());



    /**
     * <p>Create the [EMAIL PROTECTED] DynaActionForm} instance identified by the given
     * formName.</p>
     * 
     * @param formName the name used to identify the form
     * @param moduleConfig the configuration for the current module
     * @return the DynaActionForm identified by formName
     */
    public static DynaActionForm createDynaActionForm(
            String formName,
            ModuleConfig moduleConfig) {
        DynaActionForm dynaForm;
        try {
            // the code here is based on [copied from? :) ]
            //  RequestUtils.createActionForm()
            FormBeanConfig formBeanConfig =
                    moduleConfig.findFormBeanConfig(formName);

            DynaActionFormClass dynaClass =
                    DynaActionFormClass.createDynaActionFormClass(
                            formBeanConfig);

            dynaForm = (DynaActionForm) dynaClass.newInstance();

            if (logger.isTraceEnabled()) {
                logger.trace("inside findDynaActionForm() where dynaForm=" +
                          dynaForm + " and formBeanConfig=" +
formBeanConfig);
            }

            initializeDynaForm(formName, dynaForm, moduleConfig);
        } catch (Exception e) {
            logger.error("Exception [" + e + "," + e.getMessage() + "]", e);
            // TODO what to do if we get an error initializing the form?
            // -> right now we're just returning null
            dynaForm = null;
        }
        return dynaForm;
    }

    /**
     * <p>Initialize all bean properties to their initial values, as
specified
     * in the [EMAIL PROTECTED] FormPropertyConfig} elements associated with the
     * definition of this <code>DynaActionForm</code>.  Based on the
     * <code>DynaActionForm.initialize()</code> method.
     * </p>
     *
     * @param dynaForm the DynaActionForm to be initialized
     * @param moduleConfig the ModuleConfig under which this dynaForm
     *
     */
    protected static void initializeDynaForm(String name,
                                             DynaActionForm dynaForm,
                                             ModuleConfig moduleConfig) {

        FormBeanConfig config = moduleConfig.findFormBeanConfig(name);
        if (config == null) {
            return;
        }
        FormPropertyConfig props[] = config.findFormPropertyConfigs();
        for (int i = 0; i < props.length; i++) {
            dynaForm.set(props[i].getName(), props[i].initial());
        }
    }

hth,
Hubert

--- Danko Desancic <[EMAIL PROTECTED]> wrote:
> I am newbie to Struts and have a problem with  populating 
> DynaActionForm. I have two actions: one to set up userForm and one to 
> process it. 1st one is suposed to grab user info and populate the form. 
> The second one updates user info after the form is submitted. The 
> problem is that the from is not populated. Moreover changing the scope 
> to "session" in action "/user/setUp"  results in form being populated 
> with appropriate data. What am I doing wrong in here?
> 
> Thanks
> Danko
> 
> from struts-config.xml
> <form-bean name="userForm" 
> type="org.apache.struts.action.DynaActionForm">that
>             <form-property name="userName" type="java.lang.String"/>
>             <form-property name="password" type="java.lang.String"/>
>             <form-property name="fullName" type="java.lang.String"/>
>             <form-property name="email" type="java.lang.String"/>
>             <form-property name="status" type="java.lang.Integer" 
> initial="0"/>
> </form-bean>
> 
> <action
>             path="/user/setUp"
>             type="myPackage.user.SetUpUserAction"
>             name="userForm"
>             scope="request"
>             validate="false">
>             <forward name="Success"  
> path="/WEB-INF/jsp/user/userForm.jsp"/>
> </action>
>        
> <action
>             path="/user/update"
>             type="myPackage.user.UpdateUserAction"
>             name="userForm"
>             scope="request"
>             validate="true"
>             input="/WEB-INF/jsp/user/userForm.jsp">
>             <forward name="Success"  path="/user/edit.do" redirect="true"/>
>  </action>
> 
> from SetUpUserAction.execute()
>             DynaActionForm userForm = (DynaActionForm)form;
>            
>             userForm.set("userName",user.getUserName());
>             userForm.set("password",user.getPassword());
>             userForm.set("fullName",user.getFullName());
>             userForm.set("email",user.getEmail());
>             userForm.set("status",new Integer(1));
>                       
>             forward = mapping.findForward("Success");
>             return forward;
> 
> 
> from userForm.jsp
> <html:form action="/user/update.do">
> <table cellpadding="2" cellspacing="2" border="1" width="800px">
>     <tr>
>         <td class="fieldHeader" colspan="4">UPDATE USER</td>
>     </tr>
>     <tr>
>         <td class="fieldName">Username</td>
>         <td><html:text property="userName"/></td>
>     </tr>
>    ......
>     <tr>
>         <td class="fieldName">Status</td>
>         <td><html:radio property="status" value="1"/>Active &nbsp 
> <html:radio property="status" value="0"/>Inactive </td>
>     </tr>
>     <tr>
>         <td colspan="4" class="fieldName" align="center">
>             <html:submit value="UPDATE"/>
>         </td>
>     </tr>
> </table>
> </html:form>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


__________________________________
Do you Yahoo!?
Yahoo! Search - Find what you’re looking for faster
http://search.yahoo.com

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

Reply via email to