锁定老帖子 主题:struts2传递对象的那些事。。。
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-27
------------------------------------------ 由于最近在使用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什么的封装对象的属性值)。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-04-27
strtus2的result类型有chain,请google之,不解释。公司同事告诉我的。
|
|
返回顶楼 | |
发表时间:2011-04-27
最后修改:2011-04-27
A 页面使用<s:textfield name="" ></s:textfield> 传递到Baction action实现modelDriven 接口
你的流程是action(A)----------->产生对象USRR------>A.jsp----------->B.action----------->B.jsp 我在A页面用<s:form> <s:textfield name="" ></s:textfield> <s:textfield name="" ></s:textfield> <s:form> actionA里用模型对象去取,返回到A页面值还是有的,再提交到actionB里模型对象去取 |
|
返回顶楼 | |
发表时间:2011-04-27
这是
转发 和 重定向 的区别吧... 转发还是原来的 request |
|
返回顶楼 | |
发表时间:2011-04-27
peterwei 写道 strtus2的result类型有chain,请google之,不解释。公司同事告诉我的。
type="chain" 是跳转到ACTION 的, 和我表述的ACTION-JSP-ACTION不符合啊。 |
|
返回顶楼 | |
发表时间:2011-04-27
haytalent 写道 A 页面使用<s:textfield name="" ></s:textfield> 传递到Baction action继承modelDriven
modelDriven ..... 不知道理解的对不对, 仅仅只是用了模型驱动,仅仅只是省略了以前user.name的写法,可以直接写name. 但是还是无法传递对象。 <s:textfield name="" ></s:textfield> 也只能是逐个字段一个一个的写。不能直接传递一个对象,。 |
|
返回顶楼 | |
发表时间:2011-04-27
sy197661944 写道 这是
转发 和 重定向 的区别吧... 转发还是原来的 request 问题就是在struts2的时候 怎么才能共享request. |
|
返回顶楼 | |
发表时间:2011-04-27
peterwei 写道 strtus2的result类型有chain,请google之,不解释。公司同事告诉我的。
resul的type类型chain是服务器之间action跳转 所以value stack是共享的 也就是说request是共享的 所以你可以直接冲action(A)直接跳转到action(B),user对象就可以带过去了 struts2中的action跳转需要用参数的,详情介意你还是google一下. |
|
返回顶楼 | |
发表时间:2011-04-27
我表述的ACTION-JSP-ACTION不符合啊
==================================================== 你这种想法本身都是个问题。不在一次请求中,只能再传个ID什么的参数!!!然后再处理! |
|
返回顶楼 | |
发表时间:2011-04-27
alyouge 写道 我表述的ACTION-JSP-ACTION不符合啊
==================================================== 你这种想法本身都是个问题。不在一次请求中,只能再传个ID什么的参数!!!然后再处理! 恩,基本是这样。为什么设置成对象不能传递呢,总觉得原理上还不是很清晰。 和http协议有关?只支持string? |
|
返回顶楼 | |