永发信息网

Struts 2中chain如果是在同一个Action中的不同方法之间跳转

答案:5  悬赏:60  手机版
解决时间 2021-03-08 10:34
  • 提问者网友:骨子里的高雅
  • 2021-03-08 03:26
在同一个Action类中的两个方法,第一个方法改变了Action中属性的值,这个值在页面上有对应的textfield,提交到第一个方法时里面是有值的,然后在这个方法里改变了这个属性的值,然后从这个方法跳转到同一个类下的另一个方法进行处理,但是发现那个属性没有发生改变,也就是说在第一个方法中对这个属性的改变没有起作用。
配置文件如下

view
/WEB-INF/pages/Form/AC012.jsp



/WEB-INF/pages/Form/AC012.jsp
/WEB-INF/pages/Form/AC012.jsp


chain究竟是怎么样的机制,是不是相当于forward。Struts 2通过chain跳转,是否会重新走一遍拦截器栈。
最佳答案
  • 五星知识达人网友:酒安江南
  • 2021-03-08 03:46
1、原理问题,struts2每个请求到来时都会实例化Action类,所以属性都是单独的,楼主理解错了,要是按你的理解,现在的Struts2根本没法工作了。
2、如果你使用的是Spring的MVC,那么因为action类只被实例化一次,所以当第一个方法改变该该Action类的属性的时候,第二个方法也会读到改变后的值,因为根本是同一个对象。
3、案例分析:
你的ComAction 存在一个属性property,两个方法 save 和 view
(1)当你com!save.action 的时候,这时候struts会new一个 ComAction,然后你调用其save方法,改变了其属性property的值 property=123;当save方法退出的时候刚才new出来的ComAction已经被销毁了。
(2)当你com!view.action的时候,这时候struts又new一个ComAction,这时候你读取property的值,肯定不是123,因为此时的ComAction 对象是全新的。

建议:save的时候,将对象序列化到数据库,文件。或者session中,view的时候 从序列化中读取,不要依赖ComAction的属性。

PS:码字好累,不知道是不是说清楚了。
全部回答
  • 1楼网友:天凉才是好个秋
  • 2021-03-08 07:59
会不会 你进入 chain 这个之前 还要进入了一些过滤器。 然后重新进入赋值那个过滤 那里面的值是没有改变的。
  • 2楼网友:煞尾
  • 2021-03-08 06:31
配置的有问题。 一个类内部方法间的跳转可以直接在类内部直接调用另外一个方法,干嘛还要跳转?
  • 3楼网友:神鬼未生
  • 2021-03-08 06:01
你可以不可以这样呢:你跳转到第一个方法的时候,打印一下看看有没有值,如果有值的话,就返回一个视图,这个视图在struts中配置一下,或者说你这样配: 通过第一个方法有参数传递进来后然后在跳转到第二个视图,你看可以不?
  • 4楼网友:狂恋
  • 2021-03-08 05:03
chain压根就不是这么用的,唉,又是你...... chain是按你设计的动作链自动调用的,才会共享结果值。 比如 2 3 result.jsp 这是chain的机制,简单了一些,你能明白就好。 你这种情况,session最简单暴力....
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯