由STRUTS2传递对象开始说起。。。

发帖次数较少,大牛轻拍。。

------------------------------------------

由于最近在使用struts2,一些应用难免犯浑。进入正题。

大概流程 action(A)----------->产生对象USRR------>A.jsp----------->B.action----------->B.jsp

由于B.jsp还需使用user对象。故产生了想在A.JSP传递这个对象到b.action.

主流做法:

1.放在session

2.传递某些参数,再去数据库查询一遍这个对象。

3.页面隐藏USER对象中的各个属性。

为什么不能在A.jsp页面直接传递对象到action呢?

-----------------

操刀入手:

----------

尝试1:

在A.jsp中写入

request.setAttribute("user");

在B.action中获取request.setAttribute("user");

结果一直是null.

百思不得其解,一直以为是struts2中封装request的某些原因,或者是拦截器在作祟。。

后来猛然发现:是因为不是同一个request的关系,和struts2无关。。。

因为这个request 是上次的请求对象,新的请求会重新产生request.

总结一下:

在JSP 页面上使用settAttribute是没有用的。

即:客户端发出请求,服务器端相应完毕后,request即失效了。

剩下的讲究基本是response.sendRedirect 或者是 forward:

如果用request,要注意request的范围仅限于同一个request对象;
如果使用了form的"action"或者response.sendRedirect("xxx.jsp")等调转,
则不再是同一个request对象,即用request.getAttribute("name")将取不到值。
换成request.getRequestDispatcher("xxx.jsp").forward(request,response);
才能共享request中数据.

如果采用getParameter的形式,抱歉,只能支持string.

jsp页面传递对象是不是就无解呢?(别告诉我JSON什么的封装对象的属性值)。

猜你喜欢

转载自lyy3323.iteye.com/blog/1018756