关于chain,redirect和redirectAction

自己在实践的时候发现了一些问题,比如:需要将表单中的数据封装在User中,提交给firstAction处理,再将处理后的user传递给secondAction作处理。
表单如下:

<s:form action="firstAction">
<s:textfield name="user.name" label="name" />
<s:password name="user.password" label="password" />
<s:submit />
</s:form>

UserAction.java代码如下:

package st.action;

import com.opensymphony.xwork2.Action;

import st.bean.User;

public class UserAction {

private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String firstAction() {
user.setName(user.getName() + "_FIRST");
user.setPassword(user.getPassword() + "_FIRST");
System.out.println(user.getName() + "," + user.getPassword());
System.out.println(this + "," + user);
return Action.SUCCESS;
}

public String secondAction() {
user.setName(user.getName() + "_SECOND");
user.setPassword(user.getPassword() + "_SECOND");
System.out.println(user.getName() + "," + user.getPassword());
System.out.println(this + "," + user);
return Action.SUCCESS;
}
}


起先我是使用redirectAction,配置如下:

<action name="firstAction" class="st.action.UserAction" method="firstAction">
<result name="success" type="redirectAction">
<param name="actionName">secondAction</param>
<param name="user.name">${user.name}</param>
<param name="user.password">${user.password}</param>
</result>
</action>
<action name="secondAction" class="st.action.UserAction" method="secondAction">
<result>result.jsp</result>
</action>

通过打印出来的结果,可以发现虽然user的值被传递给了secondAction,但其实是重新实例化了一个user。如果要做到传递对象貌似没有什么办法,而且参数内容也被显示在了地址栏上。
使用redirect也是同样的问题。
如果使用chain又是另外一回事儿了:

<action name="firstAction" class="st.action.UserAction" method="firstAction">
<result name="success" type="chain">secondAction</result>
</action>
<action name="secondAction" class="st.action.UserAction" method="secondAction">
<result>result.jsp</result>
</action>

结果,前一次user处理后的值并没有传给secondAction,secondAction只是处理表单上的数据。
如果想要完成user对象在action中的传递,难道一定要借助session么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值