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