论坛首页 入门技术论坛

struts2传递对象的那些事。。。

浏览 5756 次
该帖已经被评为新手帖
作者 正文
   发表时间: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什么的封装对象的属性值)。

   发表时间:2011-04-27  
strtus2的result类型有chain,请google之,不解释。公司同事告诉我的。
0 请登录后投票
   发表时间: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里模型对象去取
0 请登录后投票
   发表时间:2011-04-27  
这是
转发 和 重定向 的区别吧...
转发还是原来的 request
0 请登录后投票
   发表时间:2011-04-27  
peterwei 写道
strtus2的result类型有chain,请google之,不解释。公司同事告诉我的。



type="chain" 是跳转到ACTION 的,
和我表述的ACTION-JSP-ACTION不符合啊。
0 请登录后投票
   发表时间:2011-04-27  
haytalent 写道
A 页面使用<s:textfield name="" ></s:textfield> 传递到Baction  action继承modelDriven




modelDriven .....
不知道理解的对不对,
仅仅只是用了模型驱动,仅仅只是省略了以前user.name的写法,可以直接写name.
但是还是无法传递对象。

<s:textfield name="" ></s:textfield> 也只能是逐个字段一个一个的写。不能直接传递一个对象,。
0 请登录后投票
   发表时间:2011-04-27  
sy197661944 写道
这是
转发 和 重定向 的区别吧...
转发还是原来的 request




问题就是在struts2的时候 怎么才能共享request.
0 请登录后投票
   发表时间:2011-04-27  
peterwei 写道
strtus2的result类型有chain,请google之,不解释。公司同事告诉我的。


resul的type类型chain是服务器之间action跳转  所以value stack是共享的  也就是说request是共享的
所以你可以直接冲action(A)直接跳转到action(B),user对象就可以带过去了

struts2中的action跳转需要用参数的,详情介意你还是google一下.
0 请登录后投票
   发表时间:2011-04-27  
我表述的ACTION-JSP-ACTION不符合啊

====================================================

你这种想法本身都是个问题。不在一次请求中,只能再传个ID什么的参数!!!然后再处理!
0 请登录后投票
   发表时间:2011-04-27  
alyouge 写道
我表述的ACTION-JSP-ACTION不符合啊

====================================================

你这种想法本身都是个问题。不在一次请求中,只能再传个ID什么的参数!!!然后再处理!




恩,基本是这样。为什么设置成对象不能传递呢,总觉得原理上还不是很清晰。
和http协议有关?只支持string?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics