Hi All,

I'd like to use Dynamic Forms but not "only" based on "struts-config.xml" file. 

I have build an application using Struts-b2.

I have modified the following files.
I am not smart developer so perhaps it will be better to use an abstract class for 
DynaActionFormClass as I only override "introspect" method.

Thanks for your help.

Alain


1. http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd
so that it will be possible to add the attribute "dynaClassName" to "form-bean" 
element.
Exemple: <form-bean name="MyDynaForm" type="fr.sssw.struts.action.MyDynaActionForm" 
dynaClassName="fr.sssw.struts.action.MyDynaActionFormClass" />

2. org.apache.struts.config.FormBeanConfig
so that it will take care of the above "dynaClassName" attribute
// 
-----------------------------------------------------------------------------------------------------------------
 protected String dynaClassName = null;
 
    public String getDynaClassName() {
        return (this.dynaClassName);
    }

    public void setDynaClassName(String dynaClassName) {
        if (configured) {
            throw new IllegalStateException("Configuration is frozen");
        }
        this.dynaClassName = dynaClassName;
    }

// 
-----------------------------------------------------------------------------------------------------------------


3. org.apache.struts.action.DynaActionFormClass
so that "createDynaActionFormClass" method could create a new DynaActionFormClass 
based on the value of the above "dynaClassName" attribute if it exists.
// 
-----------------------------------------------------------------------------------------------------------------
    protected static Class parameterTypes[] = {FormBeanConfig.class};
    public static DynaActionFormClass createDynaActionFormClass(FormBeanConfig config) 
{

        synchronized (lock) {
            if (dynaClasses == null) {
                dynaClasses = new HashMap();
            }
            DynaActionFormClass dynaClass = (DynaActionFormClass) 
dynaClasses.get(config.getName());
            if (dynaClass == null) {
    String dynaClassName = config.getDynaClassName();
    if (dynaClassName != null) {
     try {
      Class clazz =  Class.forName(dynaClassName);
      Constructor constructor = clazz.getDeclaredConstructor(parameterTypes);
      Object constructorValues[] = { config };
      dynaClass = (DynaActionFormClass )constructor.newInstance(constructorValues);
     } catch (Exception e) {
      System.out.println(e);
     }
    } else {
     dynaClass = new DynaActionFormClass(config);
    }
                dynaClasses.put(config.getName(), dynaClass);
            }
            return (dynaClass);
        }
    }
// 
-----------------------------------------------------------------------------------------------------------------

4. org.apache.struts.action.DynaActionFormClass
so that the constructor access specifier changes to "protected" from "private" to 
allow inheritence
// 
-----------------------------------------------------------------------------------------------------------------
    protected DynaActionFormClass(FormBeanConfig config) {

        introspect(config);

    }

// 
-----------------------------------------------------------------------------------------------------------------


Alain

Reply via email to