首先声明,我自认为对Struts已经比较熟悉,就没有去再看文档,凭自己的使用经验写啦。如有不对之处,请多指教。呵呵。 DynaActionForm的优势在于: 
1、可以省写一些类(但你得多写配置) 
2、当ActionForm的结构有变时,你只需要改配置文件,而不需要改Java源代码,换言之,不需要重新编译(但一般不会变) 我不喜欢使用DynaActionForm。原因有二: 
1、没法重写validate()方法,只能通过验证器框架验证,或者在Action中去验证。 
2、影响性能。虽然其getString()可以直接返回String,但你的项目中的数据不可能都用String吧?因其get()返回Object,所以你必须做类型转换。另外,印象中DynaActionForm不支持基本数据类型,当你需要int、double等类型的值时,不得不进行装/拆箱的操作,何必? 所以,除非有足够的理由,我不会使用DynaActionForm或其子类。 建议楼主,不必怀疑自己!就实际创建一个ActionForm的实现类吧。 用实体类的对象作为其成员,不需要多写多少代码,也不需要经常变化,使用起来还非常方便。 以用户模块为例,你之前肯定已经建好一个实体类,假如叫 User 
则你的ActionForm可以这样写: 
public class UserForm extends ActionForm 

  private User user = new User();//记得一定要初始化!   //getter & setter   //other methods 
}

解决方案 »

  1.   

    三楼的谁的挺有道理的!
    1.我写了一个分页的组建的通用类只需要在ActionForm中包含就行:
    eg:
      public class UserForm extends ActionForm 

      private Tpageinfo page = new TpageInfo();//记得一定要初始化!   //getter & setter   //other methods 
    }
    我在struts_config.xml中也这样设置了
    可就是在页面上找不到page这个内,
    是不是动态FromBean中只支持简单的数据类型啊?2.每次要得到的时候都需要get**("**")方法  
      

  2.   

    呵 用STRUTS2  FORMBEAN就都不用写了。
      

  3.   

    这不是慢慢发现吗?
    在问个问题:
      动态FromBean中只支持简单的数据类型啊?
      

  4.   

    我认为的随便说下,高手请指点!
    我们先来分析一下传统的form与动态的区别,然后就可看出他们各自的应用特点和用途
    传统的form :如果要改变表单的条目的数量,需要在jsp页面增加或减少条目,并且还要再次更改ActionForm的Java原文件,再次编译动态的form :如果改变表单的条路数量,我们同样需要在jsp页面增加或减少条目,需要在struts的配置文件中进行设置,但是我们不再需要改变ActionForm类,不需要重新编译java原文件如果我们抛去Logic逻辑层,DAO数据层不谈我们会发现这样给程序带来的更加方便的、更灵活的方式,这是一种类似Spring依赖注入的一种方式。至于什么时候使用 动态form,什么时候使用普通的form这个还真不太好比喻,因为我更多发现的是 实现某种需求只能用某种方式,或者用某种方式才是最好的。
      

  5.   

    在Strut中为什么不能像这样用啊?
        <form-bean name="loginForm"
    type="org.apache.struts.validator.DynaValidatorForm">
    <form-property name="loginname" type="java.lang.String" />
    <form-property name="UserInfo" type="cn.test.bean" />
     </form-bean>在Action中怎么都得不到UserInfo这个对象啊?
      

  6.   

    用动态FormBean减少配置,但如楼上说的,DynaActionForm不能实现valid,不过验证我一般都是在网页上用js实现,如果需要提交后验证则只能在Action中完成。至于数据交换我采用的是Attribute
      

  7.   

    用STRUTS2  FORMBEAN就都不用写了
      

  8.   


    楼上应该是用request.setAttribute("");吧!
    这样的话数据就没有封装起来!那是蛮危险的
      

  9.   

     
    String             loginname                  =   request.getParameter("loginname");