用Struts已有1个月了,但对ActionForm的存在有一些疑惑.众所周知.Struts是由"视图+模型+控制器"组成,小弟简单理解为"JSP+ActionForm+Action"....一个最简单的例子:当用户提交从jsp的表单后,Struts框架将自动把表单数据组装到ActionForm Bean中,接下来Struts框架会自动调用ActionForm Bean中的validate()方法进行表单验证,如只允许数字,字母等等,如果数据验证通过,就转到Action中去.   but,由于考虑到速度及服务器负担,数据验证都嫁祸到客户端(JavaScript实现),因此都会把struts-config中的validate设成false,这样一来,当用户提交从jsp的表单后,装载数据后直接转到Action中去了...疑问:ActionForm存在还有什么意义??就算没有了它.jsp可以直接把数据提交到action中,可以通过getParameter()取得数据.

解决方案 »

  1.   

    是的.ActionForm是jsp和action之间传递数据的载体,可以不用它的.
    有些情况用它更麻烦,有些情况用它就简单.
      

  2.   

    它用form的意思,就是为了整个表单来递交,把form放进request里,进行传递,还有就是为了
    让画面减少js,而通过后台validation来处理.具体的,等我研究好了再说!
      

  3.   

    还真没考虑过不用actionform是不是能行呢
      

  4.   

    现在很多系统不用JS的(出于安全和兼容性等考虑),所以ActionForm的validate()方法很大的一个用途就是替代JS的验证,个人认为:)
      

  5.   

    我们好象都是在Action里验证基本必要的参数的。用ActionForm有时不好,但比如想编辑页面这些用还是比较好的,反正用的不太多,我主要用Struts中的Action
      

  6.   

    使用actionForm就是为了避免使用request.getParameter("param")
      

  7.   

    如果用request.getParameter,会在request中传递信息,不安全url:xxx/xxx/xxx.do?xxx=xxx
    struts封装好的actionform还提供validate,有的时候还是很好的
      

  8.   

    Struts是由"视图+模型+控制器"组成,小弟简单理解为"JSP+ActionForm+Action"?
    ----------------------------------------------------------------------
    业务逻辑类放到哪里?JSP中?ActionForm中?Action中?
    将ActionForm理解成struts的模型层也可以,但struts的模型层应该不仅仅是ActionForm这么简单...
    如果不用ActionForm,struts还能跑的起来?
    看看struts.config.xml文件:如果去掉<form-beans>,<action>的name属性就没有value,匹配关系从何而来?浏览器不报404错误?
    再看看Action的execute方法参数,去掉ActionForm,编译器不会报错?
      

  9.   

    楼主的钻研精神值得学习,确实,ActionForm是可有可无,但是请考虑这样的情况,加入我们要作注册的时候,注册表单上有很多需要填写的,如果我们在action里面用request.getParater来得到的话,将会有很多个这样的重复语句
      

  10.   

    给你看一个我最近的案例,这个可不是简单通过getParameter可以搞定
    public class OrderForm extends ActionForm {
      private OrderHeaderDTO headerData;
      private List detailData;
      ...
      public void setDetailData(List detailData) {
        this.detailData = ListUtils.lazyList(detailData, new Factory() {
          public Object create() {
            return new OrderDetailDTO();
          }
        });
      }
    }public class OrderHeaderDTO implements Serializable {
      private String orderNo;
      private Date orderDate; //实际情况这里是更复杂的自定义对象类型
      ...
    }public class OrderDetailDTO implements Serializable {
      private String orderNo;
      private String orderDetailNo;
      private BigDecimal quantity; //实际情况这里是更复杂的自定义对象类型
    }
      

  11.   

    提交的时候,struts会自动帮你塑造出这样一棵对象树(populate)
      

  12.   

    ActionForm是Struts必不可少的,我们之所以要这样的架构是为了更好的把视图层\模型层\控制层分开,形成模块的独立性,这样其中一个模块的变化不会引起或是尽量少的引起别的模块的变化,更加方便.我们写代码不是主要在控制层,控制层只是起到中央调配作用,通过它去调用相应的模型,有时只作简单的业务处理,但是复杂的业务是在业务层Manager接口和其实现类去编写,那里的代码量应该占到60%左右.当业务处理完毕后,再通过控制层,把返回的值存入ActionForm压回页面显示给客户.
    至于验证问题,Struts有自己的验证框架,通过validation.xml和validation-rules.xml去验证,不用通过后台,我们也可以自己定义验证规则(Struts只提供了几个常用的验证)
    大家可以想想一个国家或是一个公司,模块化管理水平越高则越科技越是发达.