用Struts1,突然升级到Struts2有关于正确使用Action的问题请教大家

msn365 2012-05-15 06:49:06
一直在维护一个基于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的?
...全文
281 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
msn365 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

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

能给个例子吗?我对Struts2的配置不是很熟悉
msn365 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

嗯,应该是这样的吧!
一般是这样做的,比如有两个类,orgnization(机构),person(员工)
那么,就有两个action,一个管理机构的CRUD,一个管理员工的CRUD!
你说的如果要在进入一个页面前时,给它进行数据的初始化,比如你要从数据库先读出机构的信息。
那么就在机机构orgnization的Action中做个init方法,可以通过action的通配符,动态方法调用调用……
[/Quote]

我感觉这样做比较麻烦,而且存在一定的耦合度。我认为Action就应该和对应的页面耦合,页面上需要显示什么数据,那么Action就准备什么数据。比如JSP1上面需要显示Orgnianztion和Person信息,那么对应的DisplayAction1里面就需要调用OrgnianztionService和PersionService去准备需要的数据,DisplayAction1不应该和其他Action有任何调用和设置的关系,否则的话Action之间就存在耦合度了!

总之在Struts1中,像我说的这种模式:DisplayAction1 -> JSP1 --submit--> OperationAction1 --forward-->DisplayAction2 -> JSP2
比较好的解决了耦合度的问题,而且架构清晰。但是到了Struts2时代,却几乎看不到有人这样用,大家几乎都是配置直接去调用Action中的方法,感觉这样搞比较乱,而且存在一定耦合度。

目前不是很理解Struts2推荐的标准模式应该是怎样的?
  • 打赏
  • 举报
回复
嗯,应该是这样的吧!
一般是这样做的,比如有两个类,orgnization(机构),person(员工)
那么,就有两个action,一个管理机构的CRUD,一个管理员工的CRUD!
你说的如果要在进入一个页面前时,给它进行数据的初始化,比如你要从数据库先读出机构的信息。
那么就在机机构orgnization的Action中做个init方法,可以通过action的通配符,动态方法调用调用这个方法,返回一个字符串,你可以给这个返回字符串在struts.xml配置文件,配好你要到的那个页面!页在action中得到的值存放到一个内置对象中去,request,session都行!
当在页面操作后,需要对对orgnization进行修改,那么你再用动态方法调用找到orgnization对应的action中的那个处理的方法!
  • 打赏
  • 举报
回复
难道struts2不也是这样么?
DisplayAction1 -> JSP1 --submit--> OperationAction1 --forward-->DisplayAction2 -> JSP2
你也可以设首次的链接设到action呀!
msn365 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我现在是两个项目并行啊,以前没用过struts1,现在一个项目struts1,一个struts2,你所说的两个action,是不是一个是ActionForm,一个Action?其实你所说的OperationAction才算是action吧。

另外你不觉得Struts2简单很多吗?省去了一个actionForm,也不用再配置FormBean,而且struts2不在依赖servlet了。

……
[/Quote]

我说的DisplayAction就是一个真正的Action。不知道大家有没有遇到过这种情况,就是某个需要显示的页面,上面的数据是需要从数据库读取很多数据才可以显示的,这种情况下通常我们会使用一个Action来复杂从数据读取和组织数据,然后再转到JSP上面显示,所以一般访问顺序是:Brower -> JSP1 --submit--> OperationAction1 -> DisplayAction2 -> JSP2.

不知道在Struts2中,此类情况是如何处理的,因为我看到的基本都是Brower -> JSP1 --submit--> Action1 -> JSP2. 个人感觉这种处理,结构上不好,会导致处理JSP1请求的代码与展示JSP2的代码统统混在Action1中,这样两个页面就耦合在一起了,结构不好! 大家怎么看?

宁波朱超 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我现在是两个项目并行啊,以前没用过struts1,现在一个项目struts1,一个struts2,你所说的两个action,是不是一个是ActionForm,一个Action?其实你所说的OperationAction才算是action吧。

另外你不觉得Struts2简单很多吗?省去了一个actionForm,也不用再配置FormBean,而且struts2不在依赖servlet了。

……
[/Quote]

struts2不在依赖servlet了。

这是表象 实质是靠反射搞定的。
tom_66 2012-05-15
  • 打赏
  • 举报
回复
我现在是两个项目并行啊,以前没用过struts1,现在一个项目struts1,一个struts2,你所说的两个action,是不是一个是ActionForm,一个Action?其实你所说的OperationAction才算是action吧。

另外你不觉得Struts2简单很多吗?省去了一个actionForm,也不用再配置FormBean,而且struts2不在依赖servlet了。

把struts1项目升级到struts2,改动应该不大,至少业务逻辑可以完全不用改,struts2确实比struts1方便好用,要不他也不会取代struts1,成为最流行的mvc框架
香蕉猪 2012-05-15
  • 打赏
  • 举报
回复
Struts1跟2是有本质上差别的东西,,它根本不像一般软件1级升二级那样,这点楼主必须明晰
然后就是,,,Struts2中,我们往往直接从数据库获取数据,然后展示到页面,经过处理,提交,完事。。。
logo 设计不会,就这样先凑合了写道 Fuseblog预备开发带在线SHOP功能的个人博客系统.仿照Appfuse 提供一个完全自动化的ant构建脚本.在线SHOP的数据库建模图例已经 在博客中贴出.感兴趣的和我一起搭建,嘻嘻 文档博客地址: http://forum.sinomagazine.com 开发环境: Jcreator-4.5 JDK-1.5 Ant-1.6.1 MYSQL-5 Tomcat-5.5 Spring-2.5.6 Ibatis-2.3.4 问题事项: 1.在windows系统中,命令行中执行ant命令时,当指定的 构建脚本文件中包含中文字符,而构建脚本文件的编码是UTF-8时将会 Invalid byte 1 of 1-byte UTF-8 sequence. 的错误.这个问题尚未 知解决,故先采用GBK的编码. 2.在Jcreator中创建的项目,不支持UTF-8编码,缺省GBK. 以下先列出初步的的ant构建文件的代码: build.xml 问题,并保证构建成功。 二、工具篇: 持续集成 ... by lixw 2008-09-09 回复 (3) 网络相册开发(6)——ant 自动 ... 在工程目录下创建libs/hibernate/ ,放入 hibernate-tools-3.2.0.ga.jar jtidy-4aug2000r7-dev.jar build.properties project.name=sw project.version=1.0 basedir=. build.dir =${basedir}/build web.dir = ${basedir}/WebR ... by vyyv 2009-03-12 回复 (1) ant配置文件实例详解 build.xml 代码 xml version="1.0" encoding="UTF-8"?> 使用j2mepolish,请参考本人以前发表的文章《使用J2mePolish的build和preprocess功能》。本文主要讨论如何使用antenna来解决这个问题。 Antenna介绍 Ant ... by pandonix 2007-08-28 回复 (9) 用Ant 来编译打包您的Anroid应用 ... 通过 activityCreator.py --out myproject your.package.name.ActivityName 命令可以生成一个project ,生成project下面有个bulid.xml 文件,那个东西就可以帮你打包生成了。 来看下ant是怎么做的。 使用标准的JPA annotation,即:@Entity, @OneToMany等。 l 提供Sessionless API,也就是说没有merge,flush等方法。(这也是Ebean与Hibernatet等ORM的重要区别之一) l 支持基于Object Graph进行自动查询调优 ... by kyo100900 2009-04-07 回复 (7) jspx 一个来自于埃及的java web ... 怎么又冒出一个web框架? 看看现存的Java web应用程序框架,无一例外的要求花费大量的时间与精力后才可投入生产。对于大多数开发人员来说想要的东西很简单:友好,易于学习并且还具有生产力。因此我们开发了JSPX。 JSPX的主要目标就是打造成为一个“友好的开发者”框架。因为JSPX只基于标准的HTML标签和简单的Java POJO: 1. JSP ... by kyo100900 2009-01-07 回复 (42) NetBeans Struts2 插件更新 NetBeans Struts 2 插件(http://nbstruts2support.dev.java.net)很长时间没有更新了,我对原插件进行了少量修改,并在 NetBeans 6.7 上测试通过,其中修改包括:1.包含了最新的 Struts 2.1.6 库文件。2.更新至最新的 web framework API。3.重新设计了配置面板,支持更加灵活的最初配置。4.少量针对的 ... by gml520 2009-08-27 回复 (4) 新版本的PrettyTools发布,支持 ... PrettyFaces: EL API访问PrettyContext 支持JSF 1.1 增强了错误页面和servlet重定向 PrettyFaces是一个JSF1.2和JSF2.0的扩展,用来创建便于书签收藏、漂亮的网址。 PrettyFaces优雅的解决了这个问题,包括诸如功能:网页装载行动,无缝的跟faces的导航整合,动态视图的ID分配和管理参数分析,无需配置,兼容其他JSF框架。P ... by zly06 2009-09-09 回复 (0) 相关博客 ant模板 < ? xml version = "1.0" ?> < project name= "tax-calculator" default= "package" > < property name= "src.dir" location= "src" / > ... by article2008 2008-07-30 回复 (0) 代码备份build.xml

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧