返回信息流我看一个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这个属性了啊
这个地方如何理解?
谢谢
这是一条镜像帖。来源:北邮人论坛 / java / #45978同步于 2015/12/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
struts.xml配置的页面跳转下request 的作用域问题
esolve
2015/12/1镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
项目中不是redirect到了Action类了吗,那不是又走一遍home方法吗,home方法中把数据又压栈了吧。是这个意思吗?
【 在 esolve 的大作中提到: 】
: 我看一个SSH项目
: 里面有个acting.jsp文件有如下代码,其中request对象携带了commonlist(common变量)
:
: ...................
home方法有把数据放到request域中了,不是压栈看错了
【 在 esolve 的大作中提到: 】
: 我看一个SSH项目
: 里面有个acting.jsp文件有如下代码,其中request对象携带了commonlist(common变量)
:
: ...................
redirect的话就是另一个request了
而不是同一个request
作用域就变了
我突然想到struts.xml里映射的跳转是forward而不是redirect
是不是?
【 在 xiaohuijictf 的大作中提到: 】
: 项目中不是redirect到了Action类了吗,那不是又走一遍home方法吗,home方法中把数据又压栈了吧。是这个意思吗?
是不是同一个了,但是你配置的是
<result name="save" type="redirectAction">
<param name="actionName">elecCommonMsgAction_home</param>
重定向elecCommonMsgAction这个action中的home方法,而这个方法中又把数据放到新的request中了对吧,所以就可以取数据喽。
【 在 esolve 的大作中提到: 】
: redirect的话就是另一个request了
: 而不是同一个request
: 作用域就变了
: ...................
这个方法
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>
: ...................
是啊,你说的对啊,so?你不是问的redirect的那个方法跳转吗,也就是你的那个save方法重定向的request域中是否还有需要的数据吗?是这个意思吗?如果redirect到一个jsp页面request域中应该没有了你要的数据,但是你是redirect到home方法去啊。
【 在 esolve 的大作中提到: 】
: 这个方法
: public String home(){
: List<ElecCommonMsgForm> list = elecCommonMsgService.findElecCommonMsgList();
: ...................
我说的是这个方法
这个方法
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方法去啊。
这个过程是转发吧,request应该是一个吧,所以可以取到数据
【 在 esolve 的大作中提到: 】
: 我说的是这个方法
: 这个方法
: public String home(){
: ...................
楼主,个人觉得这和请求转发、重定向没啥关系,主要是你用了ognl表达式。。 不信你试试在jsp中用request.getAttribute("xxx")试试看能不能获取到值
你那个#request.commanList 就表示从请求的action上下文中的request属性中获取commanList这个属性
struts的ognl表达式的#,%等等 这个很头疼的 什么值栈啊、根栈啊