首先声明,我自认为对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、可以省写一些类(但你得多写配置)
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
}
只需要在struts-config.xml中配置如下:
<form-bean name=" userForm " type="org.apache.struts.action.DynaActionForm">
<form-property name="name" type="java.lang.String"/>
<form-property name="sex2" type="java.lang.String"/>
<form-property name="sex" type=" java.util.Collection "/>
</form-bean>由此可以看出动态formbean对控件较少的页面更简单,它不必写set get 方法但必须有
type="org.apache.struts.action.DynaActionForm动态formbean的使用:
DynaActionForm dyForm=( DynaActionForm) form;
String name=dyForm.get(“name”);
dyForm.set(“name”,xiel);