一直在维护一个基于Struts1的老产品,突然升级到Struts2,感觉好多东西都找不到了,特向大家求教:在Struts1时代,我们习惯为每一个页面做两个Action,一个专门用来收集数据展示页面,姑且叫它DisplayAction,另外一个Action专门用来处理来自页面的提交,并且处理下一步跳转,姑且叫做OperationAction,所以一个完整的页面处理是:HttpRequest -> DisplayAction1 -> Page1 --submit--> OperationAction1 --forward--> DisplayAction2 -> Page2.......这样做的好处是结构明晰,每一个Action只做单一的事情,而且特别适合页面要展示的数据比较复杂的时候。但是到了Struts2,几乎看不到有这样用的,大家甚至都是直接页面提交到Action的某个方法上去,而且我看页面处理顺序几乎都是页面直接到Action:HttpRequest -> Page1 --submit--> Action2 -> Page2.......请问大家都是怎样用Action的?

解决方案 »

  1.   

    Struts1跟2是有本质上差别的东西,,它根本不像一般软件1级升二级那样,这点楼主必须明晰
    然后就是,,,Struts2中,我们往往直接从数据库获取数据,然后展示到页面,经过处理,提交,完事
      

  2.   

    我现在是两个项目并行啊,以前没用过struts1,现在一个项目struts1,一个struts2,你所说的两个action,是不是一个是ActionForm,一个Action?其实你所说的OperationAction才算是action吧。另外你不觉得Struts2简单很多吗?省去了一个actionForm,也不用再配置FormBean,而且struts2不在依赖servlet了。把struts1项目升级到struts2,改动应该不大,至少业务逻辑可以完全不用改,struts2确实比struts1方便好用,要不他也不会取代struts1,成为最流行的mvc框架
      

  3.   


    struts2不在依赖servlet了。这是表象 实质是靠反射搞定的。
      

  4.   


    我说的DisplayAction就是一个真正的Action。不知道大家有没有遇到过这种情况,就是某个需要显示的页面,上面的数据是需要从数据库读取很多数据才可以显示的,这种情况下通常我们会使用一个Action来复杂从数据读取和组织数据,然后再转到JSP上面显示,所以一般访问顺序是:Brower -> JSP1 --submit--> OperationAction1 -> DisplayAction2 -> JSP2. 不知道在Struts2中,此类情况是如何处理的,因为我看到的基本都是Brower -> JSP1 --submit--> Action1 -> JSP2. 个人感觉这种处理,结构上不好,会导致处理JSP1请求的代码与展示JSP2的代码统统混在Action1中,这样两个页面就耦合在一起了,结构不好!  大家怎么看?
      

  5.   

    嗯,应该是这样的吧!
    一般是这样做的,比如有两个类,orgnization(机构),person(员工)
    那么,就有两个action,一个管理机构的CRUD,一个管理员工的CRUD!
    你说的如果要在进入一个页面前时,给它进行数据的初始化,比如你要从数据库先读出机构的信息。
    那么就在机机构orgnization的Action中做个init方法,可以通过action的通配符,动态方法调用调用这个方法,返回一个字符串,你可以给这个返回字符串在struts.xml配置文件,配好你要到的那个页面!页在action中得到的值存放到一个内置对象中去,request,session都行!
    当在页面操作后,需要对对orgnization进行修改,那么你再用动态方法调用找到orgnization对应的action中的那个处理的方法!
      

  6.   


    我感觉这样做比较麻烦,而且存在一定的耦合度。我认为Action就应该和对应的页面耦合,页面上需要显示什么数据,那么Action就准备什么数据。比如JSP1上面需要显示Orgnianztion和Person信息,那么对应的DisplayAction1里面就需要调用OrgnianztionService和PersionService去准备需要的数据,DisplayAction1不应该和其他Action有任何调用和设置的关系,否则的话Action之间就存在耦合度了!总之在Struts1中,像我说的这种模式:DisplayAction1 -> JSP1 --submit--> OperationAction1 --forward-->DisplayAction2 -> JSP2
    比较好的解决了耦合度的问题,而且架构清晰。但是到了Struts2时代,却几乎看不到有人这样用,大家几乎都是配置直接去调用Action中的方法,感觉这样搞比较乱,而且存在一定耦合度。目前不是很理解Struts2推荐的标准模式应该是怎样的?
      

  7.   

    难道struts2不也是这样么?
    DisplayAction1 -> JSP1 --submit--> OperationAction1 --forward-->DisplayAction2 -> JSP2
    你也可以设首次的链接设到action呀!
      

  8.   


    能给个例子吗?我对Struts2的配置不是很熟悉