最近在跟着一个视频做OA项目(用ssh做的),可是视频里面用的是struts1,我知道struts1已经被struts2取代的差不多了,差别也挺大的。视频里面struts用一个actionform接收jsp页面属性(这里以用户注册为例),用户的属性有很多个,然后在用一个继承action的类作为控制层。
好像之前学struts2都是把属性的接收,页面跳转都放在一个action,现在这样写,一个action的容量好像很大啊。该怎么办呢?还有,各位你们action的设计原则是什么呢,是按业务模块吗?还是其他什么的,根据项目大小决定?strutsaction设计

解决方案 »

  1.   

    可大可小,你如果把所有属性对应一个vo或者entity就不会感觉属性多了,根据不同的返回值返回不同的页面很正常呀,习惯就好,还有action一般按功能同类的action放一个命名空间.action类也可根据功能放在相应的包中,这样好管理.当然还是看公司及个人习惯.
      

  2.   

    看你这个类的设计了, 比如一个 address, 可以拆分很多属性, 也可以专门建一个class叫 address.java. 封装起来
      

  3.   

    我们的设计都是有一个VO层:值对象
    如下:ActionForm类
    package com.davis.registration.vo;
    public class ActionForm {
      private String username;
      private String password;
      private String password2;
      
      getters and setters.......
    }Action类:
    @Component("user")
    @Scope("prototype")
    public class UserAction extends ActionSupport implements ModelDriven{
        private ActionForm userForm = new ActionForm();
          @Override
          public Object getModel() {
     return userForm;
          }
    .........
    }
      

  4.   

    那直接用model层的数据就ok了把,为什么还要多一个vo层呢。公司里面做的项目第二次输入的确认密码,也要传到后台进行接受验证么,感觉vo层好像多余了
      

  5.   

    1、在中型以上的项目:vo层肯定是必须的呀,
       (1)、比如说form提交的属性有30个,而我们的相关的anction只用到了其中的username,password,
              这两个是要存到数据库中,你觉得action要建30个接收字段,建相关的getters、setters吗
              这就是严重的不匹配,我们的model层比如说是user,就只有username,password,那password2
              放到user里面肯定不合适
       (2)、你比如说,从数据库中select数据出来,N多的字段,难道全都接收到action里面吗,你认为该怎
              么办,当然是要用哪个采用哪个。
    2、关于你说的password2是否传到后台进行接受验证,你还是没弄明白。
       vo层的ActionForm类是接收form表单提交的数据的,不是model层的,当你需要时,ActionForm里
       相应的数据,赋值到model层里的实体对象里:
       如果你们的验证需要的话可以把这个做到服务器端
      

  6.   

    去学学strut1.3版吧,很经典的,它里面主要的就有Actionform 概念
      

  7.   

    Actionfrom负责接收form表单提交的说有数据,
    实体类:model层的实体对象用到哪些数据,就在Actionform里面取就是了。这种设计思路很经典:就好像你有10万块钱,你想买个面包,你不会拿着10万块钱去买面包吧,
    你顶多就拿个几百块去,是不是。现在能理解了吗,vo层还是多余的吗。
      

  8.   

    model层提取vo中接受的数据,然后放到action中去处理。action一般可以按业务分类。