请教关于使用struts2的问题

zswiori 2013-08-15 05:37:06
写项目一直都是用的struts2,不过最近写一网站碰到一个问题:
访问一个网页就是调用一个action,然后action经过处理、查询什么的得出结果,把结果放在ActionContext中,前台jsp把结果用EL表达式、struts标签之类的和HTML结合展示在页面上。通常我们的每个action类都会分在不同的模块,比如用户的就在user模块下,新闻就在news模块下,菜单就在menu模块下。。。。
那比如我现在的网站是每个页面要显示三个某块的内容,比如上面一条是菜单(每个人角色不同看到的菜单就不同,因为菜单有层级,所以到了不同的页面所看到的菜单也不同,所以必须动态生成),中间是新闻内容,下面是友情链接(必须也动态生成)。
那么请问各位大侠,如何输入一个action地址展示这个页面呢(ajax什么的就免了)?比如localhost/index.action。
其实简单的概括一下就是,如果输入一个action的地址去调用三个甚至更多的action,把所有action查询的结果都放到ActionContext中然后返回到jsp中?
求教,谢谢。。。。
...全文
217 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zswiori 2013-08-16
  • 打赏
  • 举报
回复
用frame的话是不是在某个页面按F5刷新的时候都会回到首页啊?除非在几乎所有的<a>标签里写上target="_top",然后所有需要显示完整的页面都要用frame来加载菜单和脚。 嗯。。。。确实是解决了一个链接地址访问多个action的问题,不过似乎在开发的时候有点小麻烦。 顺便请教一下,spring能不能在action的方法之前和之后加入切面啊?比如规定在某些action之前执行获取菜单列表的方法,并且可以获取这些切面方法的返回值。这可以做到吗?如果可以,劳烦讲下怎么做,谢谢各位
zswiori 2013-08-16
  • 打赏
  • 举报
回复
引用 10 楼 forgetsam 的回复:
想一个请求调用若干个action的结果,直接跳页面,页面上用<s:action 标签。
这个刚试验ok了,十分谢谢哈!
zswiori 2013-08-16
  • 打赏
  • 举报
回复
就是因为我读代码的时候不会去读get/set方法,所以代码里才不应该充斥着get/set,这些东西对我读代码来说没有帮助,为什么却要占据我文件大量的篇幅?这难道合理吗?get/set方法必须要有,但这并不代表就应该占去我代码的一般篇幅甚至更多,如果我们可以很轻易的避免这件事,为什么不这么做?
forgetsam 2013-08-16
  • 打赏
  • 举报
回复
引用 11 楼 zswiori 的回复:
[quote=引用 10 楼 forgetsam 的回复:] 胡说八道。想整洁中间空一行,上面放传入全局变量,下面放传出全局变量。 页面想找什么都到方法里写得七零八落的ActionContext里面一个一个找,真的很易读,很方便维护。
如果一个action类里有十来个方法,会返回十来种变量,那类里面会充斥着一堆get/set方法不太好看吧,况且actionContext为什么会七零八落呢,不就在一个类里面吗?只要根据页面上的key就查找一下就好了啊,更何况根据地址到配置文件里完全可以定位到action类里的具体的一个方法,你向jsp传出的结果就在return语句前面啊,这还不易读?[/quote] 哪个开源框架源码的类里没有一堆get/set方法,这些开源框架都不好看?你读代码会去读get/set吗? “你向jsp传出的结果就在return语句前面啊”给全局变量赋值的语句不也在return语句前面吗?为什么这个就不易读。还是你给全局变量赋值满天飞,用actionContext就规规矩矩写在return前面了。
zswiori 2013-08-16
  • 打赏
  • 举报
回复
引用 10 楼 forgetsam 的回复:
胡说八道。想整洁中间空一行,上面放传入全局变量,下面放传出全局变量。 页面想找什么都到方法里写得七零八落的ActionContext里面一个一个找,真的很易读,很方便维护。
如果一个action类里有十来个方法,会返回十来种变量,那类里面会充斥着一堆get/set方法不太好看吧,况且actionContext为什么会七零八落呢,不就在一个类里面吗?只要根据页面上的key就查找一下就好了啊,更何况根据地址到配置文件里完全可以定位到action类里的具体的一个方法,你向jsp传出的结果就在return语句前面啊,这还不易读?
forgetsam 2013-08-16
  • 打赏
  • 举报
回复
引用 5 楼 zswiori 的回复:
我通常很不建议将后台获取的结果放在action的属性中,action的属性就应该是用来接收传过来的值的,而不应该是用来返回给前台。这样的话代码就看起来比较整洁,你只要在action中看到属性,那你就知道调用这个action的时候会传来这些参数。而把结果放在ActionContext中的效果和使用get() 和set()方法的效果是一样的,对前台的取值来说没有任何差别。所以我一般都会这么做,为了提高代码的易读性,方便别人接手和维护。
胡说八道。想整洁中间空一行,上面放传入全局变量,下面放传出全局变量。 页面想找什么都到方法里写得七零八落的ActionContext里面一个一个找,真的很易读,很方便维护。 想一个请求调用若干个action的结果,直接跳页面,页面上用<s:action 标签。
马达马达达 2013-08-16
  • 打赏
  • 举报
回复
你是要一个页面分成几块显示吧,那就每块分别写,然后include到一个页面是不是可以呢
zswiori 2013-08-16
  • 打赏
  • 举报
回复
兄弟们,可以回一下不?十分感谢!!!
vnicer 2013-08-15
  • 打赏
  • 举报
回复
我做过几个项目都是像你这样的。 有几种做法: <action name="send_*_*" class="sendAction"> <result name="send">/WEB-INF/{1}/{2}.jsp</result> </action> 在浏览器上输入send_public_index.action 会到sendAction中的execute方法中 public String execute(){ return "send"; } 最后跳转到/WEB-INF/public/index.jsp中。jsp是一个frameset <frameset rows="100px,*,19px" framespacing="0" border="0" frameborder="0"> <frame src="${shop}/send_public_top.action" scrolling="no" noresize> <frameset cols="178px,*" framespacing="0" border="0" frameborder="no"> <frame noresize src="${shop}/send_public_left.action" scrolling="yes" /> <frame src="${shop}/send_public_right.action" name="right" noresize scrolling="yes" /> </frameset> <frame noresize name="status_bar" scrolling="no" src="${shop}/send_public_bottom.action" /> </frameset> left.jsp中可以将存放到session或者application中的权限拿到。再根据不同的角色显示不同的菜单。
zswiori 2013-08-15
  • 打赏
  • 举报
回复
引用 3 楼 learnSchema 的回复:
struts2 不是在action中定义一个属性 如何get() 和set()方法后 直接就可以通过标签去这个属性的值就行了 为什么放在ActionContext ActionContext是什么没用过?
我通常很不建议将后台获取的结果放在action的属性中,action的属性就应该是用来接收传过来的值的,而不应该是用来返回给前台。这样的话代码就看起来比较整洁,你只要在action中看到属性,那你就知道调用这个action的时候会传来这些参数。而把结果放在ActionContext中的效果和使用get() 和set()方法的效果是一样的,对前台的取值来说没有任何差别。所以我一般都会这么做,为了提高代码的易读性,方便别人接手和维护。
zswiori 2013-08-15
  • 打赏
  • 举报
回复
引用 2 楼 secondfirstlife 的回复:
这个问题,你分成三个action,份开始好,你可以合并成一个action呀,比如用户登录,你把你想要的东西,走三个action合并成一个新的action,然后登录后访问新的action不就什么都有了么,做事情很讲究方法的,如果不用ajax就只能这样了
这个有想过,实现方式有两种: 方法一是在代码里合并,比如访问地址是index.action,这个action的execute方法里先获取菜单,再获取新闻,再获取友情链接,然后封到actionContext里,由这个action转到jsp页面做展示。但问题是:比如菜单和友情链接是几乎每个页面都需要,那么代码就会变的很冗余,几乎所有action里的每个方法都要多写几句话。项目大了这非常可怕。 方法二是在在struts的配置文件里通过转发来实现,比如action1结束后转发到action2,然后在转发到action3,以此类推,最后一个action转发到jsp展示。这个的问题更严重,因为如果action获取的结果是放在actioncontext里,那么每个action都要准备接收存储上一个action得来的结果。更糟糕的是,访问线路会很复杂,如果一个页面要访问的某块稍微多一点,比如门户网站的首页,那读代码的时候一定会要人命。。。 我现在使用的方式是:菜单和友情链接切到单独的jsp页面,直接在jsp页面中用<% %>获取结果,中间的内容通过action获取,然后要用菜单和友情链接的页面就引入这两个文件。可这个的问题一是代码形式太乱不统一,二是在jsp里写java代码的方式给使用spring带来了很大的麻烦。 所以想请教各位大侠,有什么好的解决方案。。。
learnSchema 2013-08-15
  • 打赏
  • 举报
回复
struts2 不是在action中定义一个属性 如何get() 和set()方法后 直接就可以通过标签去这个属性的值就行了 为什么放在ActionContext ActionContext是什么没用过? “如果输入一个action的地址去调用三个甚至更多的action”一般不建议在action中调用action,action调用service中的方法! 你这里可以在action定义多个属性(集合) get() 和set() 后在调用多个service方法 返回的值(一般是集合)放到属性中,再在页面获取值显示出来!
secondfirstlife 2013-08-15
  • 打赏
  • 举报
回复
这个问题,你分成三个action,份开始好,你可以合并成一个action呀,比如用户登录,你把你想要的东西,走三个action合并成一个新的action,然后登录后访问新的action不就什么都有了么,做事情很讲究方法的,如果不用ajax就只能这样了
那位先生_ 2013-08-15
  • 打赏
  • 举报
回复
方法1:在一个Action中获取其他模块的数据,将其保存在session中,然后直接到jsp页面调用 方法2:直接在jsp页面使用<%%>来调用bean service,来获取其他模块的数据。 没听过一次调用三个Action的。看楼下怎么说
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创作助手写篇文章吧