反编译一下RequsetProcessor吧,这个东西是生成actionform的。你看一下里面是如何根据配置创建动态form的。里面使用了大量的反射和包装类,就看你的造化了。

解决方案 »

  1.   

    为什么一定要用DynaActionForm,新建一个类继承org.apache.struts.action.ActionForm也行嘛。
      

  2.   

    我这几天也在网上看到了RequsetProcessor。
    我一直没有比较详细的研究,现在我如果用RequsetProcessor的话,会不会对整体的struts 的运行
    造成什么影响。
    最好能有个例子,我现在实在是没有时间去看源代码,我手里还有很多详细设计书没有写呢。
    郁闷啊。
    因为现在我们的开发是基于别人的一套框架进行的,如果没有办法更改啊。
      

  3.   

    1、不用创建吧,你可以直接用form.set()方法!
    2、你定义的两个form可以合并成一个form!没有必要分成两个form!
      

  4.   

    法1,新建一个bean
    法2,在当初配置文件里定义form的时候,直接把那两个form合成一个。
      

  5.   

    合并Form的话是不行的,因为如果你把Form合并的话,
    会发现你需要把很多画面的值都放到一个Form里,这样的话Form会越来越大。
    现在就是如何新建一个Bean,但是DynaActionForm是struts框架给生成的,
    不象我们自己写的继承ActionForm的Form可一new 出来。
    所以现在新建一个bean就比较麻烦啊。
    serf() ,RequsetProcessor我这几天也看了,但是没有详细研究,
    我感觉用RequsetProcessor,需要自己解析struts-config.xml的文档。
    serf能不能帮忙弄一下,实在感谢。
      

  6.   

    这个东西可以搞出来,但过于繁琐,有些得不偿失。我建议你还是把那个form建成非动态的吧。两三分钟就搞定的事情,何必弄得那么复杂。再者,你的程序设计思路似乎有问题,用法过于怪异。
      

  7.   

    大致可采用如下方式生成 ActionForm 实例,不管是 普通的ActionForm还是DynaActionForm。
       ActionForm instance = null;
          FormBeanConfig config=null;
          config=getServlet().getModuleConfig(request) ;
           instance = config.createActionForm(getServlet());其中config.createActionForm(getServlet())函数的原型如下,可看出也可以用getDynaActionFormClass().newInstance()方法建立一个DynaActionForm实例。可用DynaBean的方法对DynaActionForm实例进行操作。public ActionForm createActionForm(ActionServlet servlet)
            throws IllegalAccessException, InstantiationException {        Object obj = null;        // Create a new form bean instance
            if (getDynamic()) {
                obj = getDynaActionFormClass().newInstance();
            } else {
                obj = formBeanClass().newInstance();
            }        ActionForm form = null;
            if (obj instanceof ActionForm) {
                form = (ActionForm)obj;
            } else  {
                form = new BeanValidatorForm(obj);
            }        form.setServlet(servlet);        if (form instanceof DynaBean && 
                ((DynaBean)form).getDynaClass() instanceof MutableDynaClass) {
                DynaBean         dynaBean  = (DynaBean)form;
                MutableDynaClass dynaClass = (MutableDynaClass)dynaBean.getDynaClass();            // Add properties
                dynaClass.setRestricted(false);
                FormPropertyConfig props[] = findFormPropertyConfigs();
                for (int i = 0; i < props.length; i++) {
                    dynaClass.add(props[i].getName(), props[i].getTypeClass());
                    dynaBean.set(props[i].getName(), props[i].initial());
                }
                dynaClass.setRestricted(isRestricted());        }        return form;    }