BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #45978同步于 2015/12/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

struts.xml配置的页面跳转下request 的作用域问题

esolve
2015/12/1镜像同步10 回复
我看一个SSH项目 里面有个acting.jsp文件有如下代码,其中request对象携带了commonlist(common变量) <s:if test="#request.commonList!=null"> <s:iterator value="%{#request.commonList}" var="common"> <tr> <td> <s:property value="%{#common.stationRun}"/> </td> <td> <s:property value="%{#common.devRun}"/> </td> <td> <s:property value="%{#common.createDate}"/> </td> </tr> </s:iterator> 而这个request对象携带commonlist属性是在java源文件实现的 java源文件把commonlist作为属性存在request对象里,然后映射(注入)到jsp文件上 这个request是如下方式得来的: public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware { @SuppressWarnings("unused") protected HttpServletRequest request = null; @SuppressWarnings("unused") protected HttpServletResponse response = null; public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletResponse(HttpServletResponse response) { this.response = response; } } public elecCommonMsgAction_extends BaseAction{ public String home(){ List<ElecCommonMsgForm> list = elecCommonMsgService.findElecCommonMsgList(); request.setAttribute("commonList", list); return "home"; } } 而acting.jsp文件是通过struts.xml里的 result 跳转方式转过去的 struts.xml 相关代码 <action name="elecCommonMsgAction_*" class="cn.itcast.elec.web.action.ElecCommonMsgAction" method="{1}"> <result name="home"> /WEB-INF/page/system/actingIndex.jsp </result> </action> 也就是说java源文件通过request这个中介对jsp表单注入了commonList这个变量里的值 页面跳转有forward和redirect两种方式 我记得是如果是forward,那么还是同一个request作用域 但是redirect的话就是另一个request作用域了 这里struts.xml配置的跳转是redirect吧,这样岂不是是另一个request了? 也就是说源文件类里的这个request和通过struts.xml转过去的不是同一个request作用域,或者说不是同一个request了 那就没有commonList这个属性了啊 这个地方如何理解? 谢谢
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
xiaohuijictf机器人#1 · 2015/12/2
项目中不是redirect到了Action类了吗,那不是又走一遍home方法吗,home方法中把数据又压栈了吧。是这个意思吗? 【 在 esolve 的大作中提到: 】 : 我看一个SSH项目 : 里面有个acting.jsp文件有如下代码,其中request对象携带了commonlist(common变量) : : ...................
xiaohuijictf机器人#2 · 2015/12/2
home方法有把数据放到request域中了,不是压栈看错了 【 在 esolve 的大作中提到: 】 : 我看一个SSH项目 : 里面有个acting.jsp文件有如下代码,其中request对象携带了commonlist(common变量) : : ...................
esolve机器人#3 · 2015/12/2
redirect的话就是另一个request了 而不是同一个request 作用域就变了 我突然想到struts.xml里映射的跳转是forward而不是redirect 是不是? 【 在 xiaohuijictf 的大作中提到: 】 : 项目中不是redirect到了Action类了吗,那不是又走一遍home方法吗,home方法中把数据又压栈了吧。是这个意思吗?
xiaohuijictf机器人#4 · 2015/12/2
是不是同一个了,但是你配置的是 <result name="save" type="redirectAction"> <param name="actionName">elecCommonMsgAction_home</param> 重定向elecCommonMsgAction这个action中的home方法,而这个方法中又把数据放到新的request中了对吧,所以就可以取数据喽。 【 在 esolve 的大作中提到: 】 : redirect的话就是另一个request了 : 而不是同一个request : 作用域就变了 : ...................
esolve机器人#5 · 2015/12/2
这个方法 public String home(){ List<ElecCommonMsgForm> list = elecCommonMsgService.findElecCommonMsgList(); request.setAttribute("commonList", list); return "home"; } 执行使得request携带了commonList 然后跳转到的是actingIndex.jsp页面,不是elecCommonMsgAction_home方法 <result name="home">/WEB-INF/page/system/actingIndex.jsp </result> 【 在 xiaohuijictf 的大作中提到: 】 : 是不是同一个了,但是你配置的是 : <result name="save" type="redirectAction"> : <param name="actionName">elecCommonMsgAction_home</param> : ...................
xiaohuijictf机器人#6 · 2015/12/2
是啊,你说的对啊,so?你不是问的redirect的那个方法跳转吗,也就是你的那个save方法重定向的request域中是否还有需要的数据吗?是这个意思吗?如果redirect到一个jsp页面request域中应该没有了你要的数据,但是你是redirect到home方法去啊。 【 在 esolve 的大作中提到: 】 : 这个方法 : public String home(){ : List<ElecCommonMsgForm> list = elecCommonMsgService.findElecCommonMsgList(); : ...................
esolve机器人#7 · 2015/12/2
我说的是这个方法 这个方法 public String home(){ List<ElecCommonMsgForm> list = elecCommonMsgService.findElecCommonMsgList(); request.setAttribute("commonList", list); return "home"; } 执行后,通过struts.xml里 <result name="home">/WEB-INF/page/system/actingIndex.jsp </result> 的配置跳转到 actingIndex.jsp页面 的这个过程,没有redirect到home方法 【 在 xiaohuijictf 的大作中提到: 】 : 是啊,你说的对啊,so?你不是问的redirect的那个方法跳转吗,也就是你的那个save方法重定向的request域中是否还有需要的数据吗?是这个意思吗?如果redirect到一个jsp页面request域中应该没有了你要的数据,但是你是redirect到home方法去啊。
xiaohuijictf机器人#8 · 2015/12/2
这个过程是转发吧,request应该是一个吧,所以可以取到数据 【 在 esolve 的大作中提到: 】 : 我说的是这个方法 : 这个方法 : public String home(){ : ...................
liuweikai机器人#9 · 2015/12/3
楼主,个人觉得这和请求转发、重定向没啥关系,主要是你用了ognl表达式。。 不信你试试在jsp中用request.getAttribute("xxx")试试看能不能获取到值 你那个#request.commanList 就表示从请求的action上下文中的request属性中获取commanList这个属性 struts的ognl表达式的#,%等等 这个很头疼的 什么值栈啊、根栈啊